SQL没有正确分组
我试图找到某些服务代码的记录数,按年份 - 在我的数据库中。SQL没有正确分组
代码:
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)
只是一个不正确聚合的大表中的一个例子。
任何人都知道为什么会发生这种情况?
你应该使用:
GROUP BY datepart(year,dbo.PUBACC_HD.grant_date)
代替:
GROUP BY dbo.PUBACC_HD.grant_date
因为它是现在,你是一个date
值,可以记录共享相同radio_service_code
值之间的不同分组。
谢谢您的解答以及答案。非常有帮助 – MattR
更改组通过要:
Group By datepart(year,dbo.PUBACC_HD.grant_date),dbo.PUBACC_HD.radio_service_code
你只有选择一年grant_date,所以你也必须通过相应
堆栈不会让我把这个标记为一个答案这个快哈哈!这是我错过的一件简单的事情。非常感谢您的快速回答。 – MattR
欢迎光临。 –
编写组,因为你被grant_date而不是一年
分组
尝试声明并根据条件更改您的小组。您正在使用一年
;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科特 - Zaniewski状态选择和分组它的日期,那是问题。
请只用(:)之前的方式:-) upvoting .. –
这实际上是一个很好的解决方案,因为它可以让其他人更容易地查询。希望两个帖子都可以成为答案 – MattR
为什么不'GROUP BY datepart(year,dbo.PUBACC_HD.grant_date),dbo.PUBACC_HD.radio_service_code'? – jarlh
由于您按日期分组,但您显示的是年份。在grant_date的年份而不是日期时间的组中,您应该很好。 –
为什么只有那三个“2011”记录被分组,而不是全部? –