SQL Server - 查找唯一记录

时间:2014-05-25 10:09:25

标签: sql sql-server subquery

我正在尝试并且没有编写脚本来返回作业和后缀的唯一组合,其中(oper = 20和value = 0)和(oper> 20和value = 1)。根据下面的数据,只有一个实例,作业2后缀3.在作业和后缀的组合中,操作20 = 0,操作40 = 1。

job suffix oper value

1    1       20    0

1    1       30    0

2    3       20    0

2    3       40    1

3    2       20    0

3    3       50    1

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

SELECT job
     , suffix
FROM t1
GROUP BY job
       , suffix
HAVING COUNT(CASE WHEN (oper = 20 and value = 0) OR (oper > 20 and value = 1) THEN suffix END) =  COUNT(*) 
   AND COUNT(*) = 2

Example

答案 1 :(得分:1)

解决此问题的一种方法是作为“set-within-sets”子查询。解决这些问题的灵活方法是使用group byhaving。在你的情况下:

select t.job, t.suffix
from table t
group by t.job, t.suffix
having sum(case when oper = 20 and value = 0 then 1 else 0 end) > 0 and
       sum(case when oper > 20 and value = 1 then 1 else 0 end) > 0;

having子句中的每个条件都会计算与特定条件匹配的行数。因此,第一行确保至少有一行oper = 20 and value = 0