我想在sql语句where子句中使用case但是我有一个问题,因为我想在某个值的基础上创建一个where子句条件,我想在它的基础上设置一个not in子句值
这是我遇到问题的查询
WHERE CODE = 'x' and
ID not in (
case
when 'app'='A' then '570','592'
when 'Q' then ID 592,90
else 592,90
END
但它不是语法
答案 0 :(得分:1)
您可以将其嵌入到SQL where where子句中:
WHERE CODE='x' and (('app' = 'A' AND ID not in ('570', '592')) OR
('app' = 'Q' AND ID not in ('592','90')) OR ('app' != 'A' AND 'app' != 'Q' AND ID not in ('592','90'))
或类似的东西。令人毛骨悚然的代码,所以我建议对不同类型的'app'参数使用不同的查询,或者创建一个存储过程来满足您的需求。
答案 1 :(得分:1)
由于592始终是集合的一部分,并且“Q”情况与默认情况相同,所以只需这样:
where CODE = 'x' and ID not in (592, case app when 'A' then 570 else 90 end)
答案 2 :(得分:1)
考虑到您可能正在尝试将实际应该是单独的语句组合在一起。
您可能需要考虑使用测试条件(可能通过简单的IF语句)来确定实际执行哪个特定的T-SQL语句。
伪代码:
IF (/*Conditions are True*/)
BEGIN
--SQL Statement
END
ELSE IF (/*Some other conditions are True)
BEGIN
--SQL Statement
END
ELSE
BEGIN
--Failsafe SQL statement
END
生成的代码的逻辑意图将更容易理解和维护。