ロールアップ データを格納する一時テーブルがあり、データを少しクリーンアップできるかどうかを確認するクエリを作成したいと考えています。かなり簡単だと思っていましたが、実際はもっと難しいことがわかりました。多分それは簡単で、私はそれにすべて間違って近づいています。
私がやろうとしているのは、Item = 'TOTALS' であるが、名前が 2 回しか表示されない行を単純に削除することです。したがって、下の表では、行 7 と 9 を削除する必要があります。ご存知のように、鍵はありません。
名前 。アイテム ……Dlvrd
--------------------------
ボブ . 102 ........... 18
ボブ。106 .......... 32
ボブ。108 .......... 34
ボブ。999 .... 184
ボブ .. TOTALS . 702
ジョン。64 .......... 86
ジョン。合計。86
ジム .. 112 .......... 131
ジム .. 合計 .. 131
ジェーン . 10 .... 720
ジェーン。12 …………。217
ジェーン。999....... 867
ジェーン。合計 1848
私の最初の試みは、name 列のカウントを含む列を追加してから、where name != '2' and Item != 'TOTALS' のような where 句を使用することでした。それらを括弧で囲んでも機能しませんでした。2 または Item = 'TOTALS' の行を削除するだけです。「AND」を完全に無視しています。ここに私のSQL:
select t.count, tr.*
From #TempRollup tr
join (
select
Name
, COUNT(Name) count
from #TempRollup
Group by Name
) as t on t.Name = tr.Name
where (
t.count != 2
and Item != 'TOTALS'
)
次に、サブクエリを作成して無視したい行を見つけ、それらを選択しないというこの方法を試しました。私のサブクエリは正しい行を取得しますが、全体が実行されると何も返されません.:
Select *
FROM #TempRollup
WHERE NOT EXISTS(
select tr.*
From #TempRollup tr
join (
select
Name
, COUNT(Name) count
from #TempRollup
Group by Name
) as t on t.Name = tr.Name
where t.count = 2
and Item = 'TOTALS'
)