在 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/