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 */