gpt4 book ai didi

sql - 过滤掉子查询中返回的行

转载 作者:行者123 更新时间:2023-12-02 05:24:27 25 4
gpt4 key购买 nike

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

我想要做的只是删除 Item = 'TOTALS' 但名称只出现两次的行。所以在下表中,第 7 行和第 9 行应该被删除。请注意,没有 key 。

姓名。项目......Dlvrd
--------------------------
鲍勃。 102 ......... 18
鲍勃。 106 ......... 32
鲍勃。 108 ......... 34
鲍勃。 999 ......... 184
鲍勃 .. 总计。 702
约翰 。 64 ............ 86
约翰 。总计。 86
吉姆 .. 112 .......... 131
吉姆 .. 总计 .. 131
简。 10 ......... 720
简。 12 ......... . 217
简。 999 ...... 867
简。总计 1848

我的第一次尝试包括添加一个包含名称列计数的列,然后使用 where 子句,例如:where name != '2' and 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'
)

最佳答案

试试这个:

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 Fiddle example

关于sql - 过滤掉子查询中返回的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13295636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com