当满足2个条件时,我需要过滤一些行,但不排除其他行。
表格:
idRow idMaster idList
1 10 45
2 10 46
3 10 47
4 11 10
5 11 98
6 14 56
7 16 28
8 20 55
示例:
何时:
预期结果:
idRow idMaster idList
1 10 45
5 11 98
6 14 56
7 16 28
8 20 55
运行SQL Server 2014
我尝试了CASE IF的组合,但所有情况仅过滤idMaster = 10,11和idList = 45,98,不包括其他行
答案 0 :(得分:4)
尽管您没有提到数据库名称,但是以下查询逻辑将适用于所有数据库-
SELECT *
FROM your_table
WHERE idMaster NOT IN (10,11)
OR (idMaster = 10 AND idList = 45)
OR (idMaster = 11 AND idList = 98)
答案 1 :(得分:1)
您确实可以使用(嵌套的)case
来执行此操作。希望这可以帮助您更好地理解。
case idMaster
when 10 then case idList when 45 then 1 end
when 11 then case idList when 98 then 1 end
else 1
end = 1
这可能是最好的:
not (idList = 10 and idList <> 45 or idList = 11 and idList <> 98)
总体而言,避免在多个位置重复该值列表通常是有益的。两者都避免了在更改到来时保持同步。