我有一個存儲彙總數據的臨時表,並且希望創建一個查詢以查看我是否可以稍微清理一些數據。我認爲這會很容易,但事實證明,這會變得更加困難。也許這很容易,我只是接近它而已。篩選出在子查詢中返回的行
我想要做的只是刪除行,其中Item ='TOTALS'但名稱只顯示兩次。所以在下面的表格中,第7行和第9行應該被刪除。只是你知道,沒有鑰匙。
名稱。 Item ...... Dlvrd
--------------------------
Bob。 102 .......... 18
Bob。 106 .......... 32
Bob。 108 .......... 34
Bob。 999 .......... 184
Bob .. TOTALS。 702
約翰。 64 ........... 86
John。總計。 86
Jim .. 112 .......... 131
Jim .. TOTALS .. 131
簡。 10 .......... 720
簡。 12 ........。 217
簡。 999 ........ 867
簡。總計1848
我的第一次嘗試包括添加一個名稱列的計數列,然後使用where子句,如:where name!='2'和Item!='TOTALS'。沒有工作,甚至括括號括起來。它只是刪除任何一行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'
)
謝謝Lc。!這是快速反應,並返回我所需要的。現在我計劃搞清楚爲什麼我的工作沒有成功。 :-) – N1tr0
它沒有工作的原因是因爲你沒有將你的主查詢關聯到NOT EXISTS子查詢。由於滿足您的查詢的一行存在*表中某處*,EXISTS對於每一行都返回True。 –
啊,好的。感謝您的解釋。 – N1tr0