GROUP BY问题在SQL

问题描述:

我有以下代码计数:GROUP BY问题在SQL

SELECT 
    ir.[Id] 
    ,ir.[DriverLicenseNumber] 
    ,COUNT(ir.[ReportNumber]) As [TotatReports] 
    ,ir.[LastName] 
    ,ir.[FirstName] 
    FROM [dbo].[InterimReports] ir 
GROUP BY ir.[DriverLicenseNumber],ir.[Id],ir.[LastName],ir.[FirstName] 

这仍然给我相同的驱动程序在多个记录许可证。我只想看到每个许可证有1个独特的驱动程序许可证。然后,我想要统计驱动程序许可证号与其相关的许多报告。

+2

您会得到重复的DriverLicenseNumber值,但所有的值是否都重复?例如,每个返回行的报表ID是否都不相同? – 2011-01-26 19:32:04

如果你只是想看看,就像你说的,独特的驾驶执照和他们的罪状,然后你只是离开了您的查询的ID列,因为它似乎是最有可能的原因,为什么你的查询返回重复的,你没有想到的。

这里:

SELECT 
    ir.[DriverLicenseNumber] 
    ,COUNT(ir.[ReportNumber]) As [TotatReports] 
    ,ir.[LastName] /* if these two are not related to DriverLicenseNumber */ 
    ,ir.[FirstName] /* they should probably be left out as well */ 
FROM [dbo].[InterimReports] ir 
GROUP BY ir.[DriverLicenseNumber] 
    ,ir.[LastName],ir.[FirstName] /* same restriction applies */ 

我知道它已经在评论你的问题说,所以我不应该被人打扰,什么Quassnoi曾建议基本上是做同样的事情。只有这个解决方案看起来有点矫枉过正,并且比简单的分组慢。另外,为什么你需要结果中的Id列?因此,我认为如果(或许更好)替代方案可以对你和对那些感兴趣的人更加公开,那就没问题了。

WITH q AS 
     (
     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY driverlicensenumber ORDER BY id) rn 
       COUNT(*) OVER (PARTITION BY driverlicensenumber) cnt 
     FROM interimreports 
     ) 
SELECT * 
FROM q 
WHERE rn = 1