SQL - 计数时显示> 1

时间:2015-11-25 16:02:05

标签: sql database sql-server-2008

我有以下查询,我确定是不正确的。我有一个名为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行。

2 个答案:

答案 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