2

我有一个存储汇总数据的临时表,并且想创建一个查询以查看是否可以稍微清理一下数据。我以为这很容易,但事实证明要困难得多。也许这很容易,而我只是错误地接近它。

我要做的只是删除 Item = 'TOTALS' 但名称只出现两次的行。因此,在下表中,应删除第 7 行和第 9 行。只是让你知道,没有钥匙。

姓名 。项目 ......Dlvrd
--------------------------
Bob 。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' 的行。它完全忽略了“与”。这是我的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'
)
4

2 回答 2

4

试试这个:

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

SQL 小提琴示例

于 2012-11-08T18:48:15.493 回答
1

这对我有用:

select * from #TempRollup t
where 2 <> (select count(Name) from #TempRollup where Name = t.Name)
and Item <> ' TOTALS';
于 2012-11-08T19:04:45.247 回答