在SQL中计数分组BY问题

时间:2011-01-26 19:28:24

标签: sql sql-server

我有以下代码:

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

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果您只想查看,如您所说,唯一的驱动程序许可证及其计数,那么您只需省略查询的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列?

所以,我认为如果(可能更好的)替代方案对你和那些感兴趣的人都更加公开,那就没关系了。