sql - 在where子句中使用IIF语句

标签 sql sql-server-2014 where-clause

我正在尝试使用以下代码将多个条件添加到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%')

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

最佳答案

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

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不会将 bool 表达式的结果视为有效值。您将需要执行以下操作:
where (case when . . . and . . . then 1
            else 0
       end) = 1

上面没有考虑NULL值。如果需要,可以轻松添加该条件。

关于sql - 在where子句中使用IIF语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47476989/

相关文章:

sql - 使用子查询提高 UPDATE 查询的性能

mySql:获取单元格中单词数(字符串逗号分隔)与匹配单元格具有相同值的行

mysql - mysql-query 中有多少个 where-clause 太多了?

Powershell - 使用Where-object,查找带有数字的字符串(电子邮件地址)

Android删除查询数据库

sql-server - 根据搜索文本删除父子记录

java mysql 外键约束

c# - 在 C# 中捕获 RAISERROR

mysql - MS Access 2003 年公司报告

sql - 不使用 "left join"模拟左连接