我有以下查询,我确定是不正确的。我有一个名为KantechImages的表,它包含大约8500行。我想显示名字,ESRno,Dept& JobTitle,其中有一个人出现超过1名。我的疑问是:
SELECT Name, COUNT(*) AS count, ESRno, JobTitle, Dept
FROM dbo.KantechImages
GROUP BY Name, ESRno, JobTitle, Dept
HAVING (COUNT(*) > 1)
但它只显示268行,我知道这是不正确的。如果我将其编辑为SELECT Name & Count
,则会带回超过500行。
答案 0 :(得分:2)
您可以使用窗口功能执行所需操作:
select name, cnt, ESRno, JobTitle, Dept
from (select ki.*, count(*) over (partition by name) as cnt
from dbo.KantechImages ki
) ki
where cnt > 1;
由于您需要原始行,因此外部group by
中的select
不合适。
答案 1 :(得分:0)
您的查询看起来没问题。我认为问题出在您的数据上。可能你认为是相同的东西,它们不像名称中的额外空格。或者名称和ESRno之间可能不匹配。
尝试类似
的内容这应该返回相同的+500名称,但是按名称排序可以比较一些是否有额外的空格并且显示重复。
SELECT Name, count(Name)
FROM dbo.KantechImages
GROUP BY Name
ORDER BY Name
HAVING count(Name) > 1
这应该返回相同的+500,因为我假设每个名称都有一个ESRno,除非两个ppl具有相同的名称。在这种情况下,您应该在结果中获得更多行。
SELECT Name, ESRno, Count(ESRno)
FROM dbo.KantechImages
GROUP BY Name, ESRno
ORDER BY Name, ESRno
HAVING count(ESRno) > 1