嗨,这是我的小问题。我正在使用sql,我有一些逻辑操作来从sql数据库中获取值。我有屏幕截图。请参考
因为我有四个不同组合的查询。如果你选择 1和2 ,两者都给出了相同的答案, 3和4 给了我不同的答案。现在我的问题是我有两个运算符 1.OR和2.And ,而过滤器表示变量可能是 n 。 现在我的问题是
欢迎任何编码编码
任何人都可以尽快帮助我
更新
更清楚
如果我有四个值,即 a,b,c,d 然后我必须构建差异组合,如
1。 (a或b)而非(c或d)
2。 a或(b而非c)或d
我已经更新了我的问题..像这样我必须生成不同的组合并得到答案
答案 0 :(得分:1)
如果要比较集合中的多个行,则无法使用示例中显示的逻辑,因为单个行在单个列中不能有多个值。
一个常见的解决方案是在这组行上使用聚合,并在HAVING检查是否有任何行调整检查时将条件移动到CASE中:
e.g。你的第二个选择,
(code = 40660 or code = 40900) and not code = 41180
可以简化为
(code in (40660, 40900)) and code <> 41180
翻译成HAVING:
SELECT grpcol
FROM tab
GROUP BY grpcol
HAVING
-- any row with a code 40660 or 40900 --> result > 0 --> TRUE
SUM(CASE WHEN code IN (40660, 40900) THEN 1 ELSE 0 END) > 0
AND
-- any row with code 41180 --> result > 0 --> FALSE
SUM(CASE WHEN code <> 41180 THEN 1 ELSE 0 END) = 0