我有一个存储汇总数据的临时表,并希望创建一个查询,看看我是否可以稍微清理一下数据。我认为这很容易但事实证明它要困难得多。也许这很容易,我只是把它接近一切都错了。
我要做的只是删除Item ='TOTALS'的行,但名称只显示两次。因此,在下表中,应删除第7行和第9行。你知道,没有钥匙。
姓名。项目...... Dlvrd
--------------------------
鲍勃102 .......... 18
鲍勃106 .......... 32
鲍勃108 .......... 34
鲍勃999 .......... 184
鲍勃..总计。 702个
约翰 。 64 ........... 86
约翰 。总计。 86个
吉姆...... 112 .......... 131
吉姆..总计.. 131
简。 10 .......... 720
简。 12 ........ 217个
简。 999 ........ 867
简。总计1848年
我的第一次尝试包括添加一个带有name列数的列,然后使用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'
)
答案 0 :(得分:3)
试试这个:
SELECT t.*
FROM #TempRollup t
INNER JOIN
(
SELECT Name, COUNT(*) cnt
FROM #TempRollup
GROUP BY Name
) counts ON t.Name = counts.Name
WHERE t.Item <> 'TOTALS' OR counts.cnt <> 2
答案 1 :(得分:1)
这对我有用:
select * from #TempRollup t
where 2 <> (select count(Name) from #TempRollup where Name = t.Name)
and Item <> ' TOTALS';