SQL Sever的:在... ...的情况下在WHERE子句
我需要编写一个查询这样的事情:SQL Sever的:在... ...的情况下在WHERE子句
Select [something]
Where
condition in
case
when (if another_condition = A and 3rd Condition = B) then (C,D)
when (if another_condition = N and 3rd Condition = E) then (F,G)
else (J,K)
end
基本上,我要的是如果A和B都满足,条件可以设置为C或D,如果满足N或E,则条件可以设置为F或G,否则条件设置为J或K. 但是,当我运行此操作时,我一直在获取 语法附近的语法不正确关键字'Case'。
请帮忙!谢谢!
也许这:
Where (Another_Condition = 'A' And Third_Condition = 'B' And Condition in ('C','D'))
Or
(Another_Condition = 'N' and Third_Condition = 'E' And Condition in ('F','G'))
Or
Condition In ('J','K')
非常小心混合的和或在where子句。括号很重要。
我也想提出这个建议。我认为你的最终OR子句是错误的,因为它将为每一行测试条件IN('J','K'),而不像CASE ... ELSE,它将只对与第一行不匹配的行进行测试两个条款。 最后一行应为: NOT((Another_Condition ='A'AND Third_Condition ='B')OR(Another_Condition ='N'AND Third_Condition ='E'))AND条件IN('J','K “) – 2010-08-11 13:37:20
这怎么样 - UNION子查询会给你在子查询中的完整结果集。然后你可以说'WHERE condition IN'(子查询)。就像这样:
SELECT [something]
WHERE
condition IN
(SELECT CASE WHEN (another_condition = A AND 3rd Condition = B) THEN C
WHEN (another_condition = N AND 3rd Condition = E) THEN F
ELSE J
END AS Value
UNION
SELECT CASE WHEN (another_condition = A AND 3rd Condition = B) THEN D
WHEN (another_condition = N AND 3rd Condition = E) THEN G
ELSE K
END AS Value
)
非常感谢所有人的回答,我使用了G Mastro的方法,它效果很好!谢谢! – AZhu 2010-08-13 11:02:34
我可能会用G Mastro的方法来扩展查询作为布尔表达式。尽管嵌套查询方法可行,但代码的意图不太明显。尽管如此,如果您的CASE语句中有很多情况,您可能需要考虑重新整理数据,因为无论您如何编写查询,它都归结为一个大的布尔表达式。
你的CASE语句中'设置为C或D'是什么意思?遇到相同的CASE条件时,您不能得到2个不同的结果。 – flayto 2010-08-11 13:09:05
要解决CASE错误,请将CASE语句放在括号中。 – 2010-08-11 13:09:29