我有以下代码:
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个唯一驾驶执照。然后我想计算一下驾驶执照号码与之相关的报告数量。
答案 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列?
所以,我认为如果(可能更好的)替代方案对你和那些感兴趣的人都更加公开,那就没关系了。