sql-server - 在 'case when ' 子句 sql server 中使用 'where' 时出现问题

标签 sql-server database sql-server-2008

在 sql 查询中的 where 子句中使用 case when 时,它不起作用。

问题:

我有两个名为 TblEmployee 和 TblAssociate 的表。这两个表都包含公共(public)列 periodId、EmpId 和 AssociateId。我的要求是从中获取值 应排除具有 TblAssociate 中的 EmpId 和 AssociateId 组合的 TblEmployee。并且排除应基于 periodId 条件。`

If(@PeriodID<50)
BEGIN
  SELECT * 
  FROM TblEmployee 
  WHERE (EmpId+AssociateId) NOT IN (SELECT EmpId+AssociateId FROM TblAssociate)
END
ELSE
BEGIN
  SELECT * 
  FROM TblEmployee 
  WHERE (EmpId) NOT IN (SELECT EmpId FROM TblAssociate)
END

上面的代码可以工作,但我需要避免 IF-ELSE 条件,并且我希望在 where 子句中使用“case when”。请帮忙

最佳答案

试试这个:

SELECT * 
FROM TblEmployee 
WHERE (EmpId + CASE WHEN @PeriodID<50 THEN AssociateId ELSE 0 END) NOT IN 
      (SELECT EmpId + CASE WHEN @PeriodID<50 THEN AssociateId ELSE 0 END FROM TblAssociate)

你说你的代码正在工作,但这很奇怪,因为将 id 值加在一起没有多大意义。无论如何,上述语句产生的结果与最初发布的代码等效。

关于sql-server - 在 'case when ' 子句 sql server 中使用 'where' 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37202574/

相关文章:

sql - 查询 View 以获取其列名

c# - 如果不存在,是否创建数据库文件 (.sdf)?

sql - Cross Join 有什么用?

sql-server - SQL Server 2008 上的间歇性慢查询

sql-server - WHERE IN (SELECT NonExistingColumnName) 导致意外行为

sql - 连接两个表时如何获取表二的最大ID列

sql-server - SQL Server 回滚事务

sql-server - 我想编写一个通用存储过程来将数据插入数据库的任何表中

database - Oracle where 子句日期选择不起作用

sql-server - 该查询如何在执行计划中生成两个连接运算符?