SQL没有正确分组

时间:2016-09-16 14:04:13

标签: sql sql-server group-by

我试图按年份在我的数据库中查找某些服务代码的记录数。

代码:

SELECT datepart( year,dbo.PUBACC_HD.grant_date) as'Year',
       dbo.PUBACC_HD.radio_service_code as 'Service Code',
       count(dbo.PUBACC_FR.transmitter_make) as 'Number of Records'

FROM dbo.PUBACC_FR 
INNER JOIN dbo.PUBACC_HD 
ON dbo.PUBACC_FR.unique_system_identifier = dbo.PUBACC_HD.unique_system_identifier
GROUP BY  dbo.PUBACC_HD.grant_date, dbo.PUBACC_HD.radio_service_code
ORDER BY [Number of Records] desc

当前结果:

Year        Service Code Number of Records
----------- ------------ -----------------
2011        CF           11195 <----
2013        CF           2042
2011        CF           1893  <----
2013        CF           1879
2013        CF           1841
2013        CF           1741
2013        CF           1644
2010        CF           1595
2013        MG           1563
2011        CF           1512  <----
2013        CF           1510
2011        CF           1454
2011        CF           1428
2016        CF           1385
2011        CF           1378
2015        MG           1349

我希望汇总所有字段。箭头表示的无聚合的示例。 (2011, CF)只是大表中没有正确聚合的一个例子。

任何人都知道为什么会这样吗?

4 个答案:

答案 0 :(得分:4)

您应该使用:

GROUP BY datepart( year,dbo.PUBACC_HD.grant_date)

而不是:

GROUP BY  dbo.PUBACC_HD.grant_date

就像现在一样,您按date值进行分组,这些值在共享相同radio_service_code值的记录中可能会有所不同。

答案 1 :(得分:3)

更改分组至:

Group By datepart( year,dbo.PUBACC_HD.grant_date),dbo.PUBACC_HD.radio_service_code

您只能从grant_date中选择年份,因此您还必须相应地编写分组

答案 2 :(得分:2)

因为您按grant_date分组而不是按年份分组

答案 3 :(得分:2)

尝试使用声明,并按条件更改您的群组。

;With CTE AS
(    
    SELECT 
         datepart( year,dbo.PUBACC_HD.grant_date) as Year,
         dbo.PUBACC_HD.radio_service_code as ServiceCode,
         count(dbo.PUBACC_FR.transmitter_make) as NumberofRecords        
    FROM dbo.PUBACC_FR 
    INNER JOIN dbo.PUBACC_HD 
    ON dbo.PUBACC_FR.unique_system_identifier = dbo.PUBACC_HD.unique_system_identifier
)
Select * from cte
GROUP BY  Year, ServiceCode
ORDER BY NumberofRecords desc

正如@Lucas Kot-Zaniewski所说,你在使用年份选择并按日期分组,这就是问题。