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个独特的驱动程序许可证。然后,我想要统计驱动程序许可证号与其相关的许多报告。
答
如果你只是想看看,就像你说的,独特的驾驶执照和他们的罪状,然后你只是离开了您的查询的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
您会得到重复的DriverLicenseNumber值,但所有的值是否都重复?例如,每个返回行的报表ID是否都不相同? – 2011-01-26 19:32:04