Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中计数的分组问题_Sql_Sql Server - Fatal编程技术网

SQL中计数的分组问题

SQL中计数的分组问题,sql,sql-server,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.[FirstNa

我有以下代码:

    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]

这仍然是给我相同的驾驶执照在多个记录。我只想看到每个驾照有一个唯一的驾照。然后,我想计算与驾照号码相关的报告数量。

如果您只想看到,如您所说,唯一的驾照及其计数,那么您只需省略查询的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
在这里:

我知道在对你的问题的评论中已经提到了这一点,所以我不应该被打扰,我所建议的基本上是做同样的事情。只有那个解决方案看起来有点过分,而且比简单的分组要慢。另外,为什么在结果中需要Id列


因此,我认为,如果(可能更好)的替代方案能够对您和感兴趣的人更加公开,那就好了。

您得到了重复的DriverLicenseNumber值,但是所有的值都重复了吗?例如,每个返回行的报告ID是否不同?如果有两条记录具有相同的许可证号但详细信息不同(姓、名、ID等),要查看哪条记录的详细信息?如果您的
Id
列是唯一的,则不应将其包含在
SELECT
语句或
分组依据中。
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 */