-1

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

在此处输入图像描述

因为我有四个不同组合的查询。如果你拿1 和 2都给我相同的答案,而3 和 4给我不同的答案。现在我的问题是我有两个运算符1.OR 和 2.And Not和过滤器 while 意味着变量可能是n现在我的问题是

  1. 我想获得给定变量的不同组合
  2. 并且必须消除给我同样结果的可能性

欢迎任何算法编码

谁能尽快帮助我

更新

为了更清楚

如果我有四个,即a、b、c、d, 那么我必须构建差异组合,例如

1.(a或b)而不是(c或d)

2. a or ( b and not c ) or d

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

4

1 回答 1

1

如果要比较集合中的多行,则不能使用示例中显示的逻辑,因为单行不能在单列中有多个值。

一个常见的解决方案是在这组行上使用聚合并将条件移动到 HAVING 检查是否有任何行正在检查中的 CASE:

例如你的第二选择,

(code = 40660 or code = 40900) and not code = 41180

可以简化为

(code in (40660, 40900)) and code <> 41180

翻译成有:

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 
于 2013-09-19T09:48:15.517 回答