私は次の表を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
私は次の表を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
使用条件の集約:
SELECT SetId
FROM yourTable
GROUP BY SetId
HAVING SUM(CASE WHEN TaskId = 4 THEN 1 ELSE 0 END) = 0;
ここで基本的な考え方は、レコードの各SetId
グループをスキャンし、4のTaskId
値が発生した回数をカウントすることです。 HAVING
句は、4値が決して発生しないグループのみを保持します。
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];
私はあなたが
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だけを選択してください)
質問を追加サンプル出力してください –
"Where TaskId!= 4"のようなクエリのどこに追加すればいいですか?または、あなたの質問を詳しく説明できますか? –
その場合、1を返す間に7を返します。行の数ではなく、行の数を知る必要があります。 –