我试图按年份在我的数据库中查找某些服务代码的记录数。
代码:
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)
只是大表中没有正确聚合的一个例子。
任何人都知道为什么会这样吗?
答案 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所说,你在使用年份选择并按日期分组,这就是问题。