在SQL中计算筛选集

时间:2017-12-30 06:09:55

标签: sql sql-server

我在下面的表中输入了3组,我将计算没有的组数(TaskId = 4),我该如何实现?

SetId     TaskId

1           0
1           1
1           4

2           0
2           2
2           3

3           0
3           2
3           4   

3 个答案:

答案 0 :(得分:3)

使用条件聚合:

SELECT SetId
FROM yourTable
GROUP BY SetId
HAVING SUM(CASE WHEN TaskId = 4 THEN 1 ELSE 0 END) = 0;

这里的基本思想是扫描每个SetId组记录,并计算TaskId值为4的次数。 HAVING子句仅保留从不发生4值的组。

答案 1 :(得分:0)

使用CASE表达式检查TaskId值是否为4.并使用SUM函数进行分组SetId

<强>查询

select [SetId], 
SUM(case [TaskId] when 4 then 0 else 1 end) as [sum]
from [your_table_name]
group by [SetId];

答案 2 :(得分:0)

我认为你正在寻找像

这样的东西
SELECT *
FROM mytable t1
WHERE t1.SetId NOT IN (SELECT t2.SetId FROM mytable t2 WHERE t2.TaskId = 4)

(选择没有TaskId = 4的完整集)

SELECT distinct SetId
FROM mytable t1
WHERE t1.SetId NOT IN (SELECT t2.SetId FROM mytable t2 WHERE t2.TaskId = 4)

(仅选择没有TaskId = 4的SetIds)