2017-12-30 8 views
0

私は次の表を3セットのinvovingソートしていますが、何もない(TaskId = 4)セットの数を計算するつもりです。計算されたSQLのフィルタリングされたセット

SetId  TaskId 

1   0 
1   1 
1   4 

2   0 
2   2 
2   3 

3   0 
3   2 
3   4 
+1

質問を追加サンプル出力してください –

+0

"Where TaskId!= 4"のようなクエリのどこに追加すればいいですか?または、あなたの質問を詳しく説明できますか? –

+0

その場合、1を返す間に7を返します。行の数ではなく、行の数を知る必要があります。 –

答えて

3

使用条件の集約:

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

ここで基本的な考え方は、レコードの各SetIdグループをスキャンし、4のTaskId値が発生した回数をカウントすることです。 HAVING句は、4値が決して発生しないグループのみを保持します。

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]; 
0

私はあなたが

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

(= 4何のタスクIDを持っていない完全なセットを選択)

または

SELECT distinct SetId 
FROM mytable t1 
WHERE t1.SetId NOT IN (SELECT t2.SetId FROM mytable t2 WHERE t2.TaskId = 4) 
のようなものを探していると思います

(TaskId = 4を持たないSetIdsだけを選択してください)

関連する問題