具有逻辑运算的sql

时间:2013-09-19 09:35:02

标签: sql database algorithm tsql

嗨,这是我的小问题。我正在使用sql,我有一些逻辑操作来从sql数据库中获取值。我有屏幕截图。请参考

enter image description here

因为我有四个不同组合的查询。如果你选择 1和2 ,两者都给出了相同的答案, 3和4 给了我不同的答案。现在我的问题是我有两个运算符 1.OR和2.And ,而过滤器表示变量可能是 n 现在我的问题是

  1. 我想获得给定变量的不同组合
  2. 并且必须消除给我相同结果的可能性
  3. 欢迎任何编码编码

    任何人都可以尽快帮助我

    更新

    更清楚

    如果我有四个,即 a,b,c,d 然后我必须构建差异组合,如

    1。 (a或b)而非(c或d)

    2。 a或(b而非c)或d

    我已经更新了我的问题..像这样我必须生成不同的组合并得到答案

1 个答案:

答案 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