在where子句中使用IIF语句

9
我正在尝试使用以下代码在SQL Server 2014中向Where子句添加多个条件,但是我遇到了语法错误。
我已经尝试过使用Case语句,但是根据这个网站上的示例无法使其工作。
Where  
iif(ss.DATAAREAID = 'USMF',
 (ss.ITEMGROUPID like 'S%' and  ss.ITEMGROUPID  not like 'SMS%'),
(ss.ITEMGROUPID like 'SW%' and  ss.ITEMGROUPID  like 'SS%')

我知道这是一个快速的解决方案,但是任何帮助都会受到赞赏。


@LasseVågsætherKarlsen - https://learn.microsoft.com/en-us/sql/t-sql/functions/logical-functions-iif-transact-sql - PM 77-1
没关系,显然需要更新我的SQL Server知识。 - Lasse V. Karlsen
1个回答

17

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

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%')
注意:iif()是SQL Server的一个函数,但它是为了向后兼容MS Access而引入的。您应该使用ANSI标准的case表达式。
您的版本不起作用,因为SQL Server不将布尔表达式的结果视为有效值。您需要像这样做:
where (case when . . . and . . . then 1
            else 0
       end) = 1

以上内容未考虑NULL值。如果需要,可以轻松添加该条件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接