在where子句中使用IIF语句

Jun*_*i0R 1 sql where-clause sql-server-2014

我试图使用以下代码将多个条件添加到SQL Server 2014中的Where子句,我收到语法错误.

我已经尝试了一个案例陈述,但根据本网站上的示例无法实现.

Where  
iif(ss.DATAAREAID = 'USMF',
 (ss.ITEMGROUPID like 'S%' and  ss.ITEMGROUPID  not like 'SMS%'),
(ss.ITEMGROUPID like 'SW%' and  ss.ITEMGROUPID  like 'SS%')
Run Code Online (Sandbox Code Playgroud)

我相信这是一个快速的解决方案,但任何帮助将不胜感激.

Gor*_*off 6

不要使用条件逻辑.只需使用布尔表达式:

Where (ss.DATAAREAID = 'USMF', and ss.ITEMGROUPID like 'S%' and ss.ITEMGROUPID  not like 'SMS%') or
      (ss.DATAAREAID <> 'USMF' and ss.ITEMGROUPID like 'SW%' and ss.ITEMGROUPID  like 'SS%')
Run Code Online (Sandbox Code Playgroud)

注意: iif()是SQL Server函数,但它是为了向后兼容MS Access而引入的.您应该使用ANSI标准case表达式.

您的版本不起作用,因为SQL Server不会将布尔表达式的结果视为有效值.你需要做这样的事情:

where (case when . . . and . . . then 1
            else 0
       end) = 1
Run Code Online (Sandbox Code Playgroud)

以上并未考虑NULL价值.如果需要,可以轻松添加该条件.