2016-09-16 75 views
1

我試圖找到某些服務代碼的記錄數,按年份 - 在我的數據庫中。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)只是一個不正確聚合的大表中的一個例子。

任何人都知道爲什麼會發生這種情況?

+1

爲什麼不'GROUP BY datepart(year,dbo.PUBACC_HD.grant_date),dbo.PUBACC_HD.radio_service_code'? – jarlh

+0

由於您按日期分組,但您顯示的是年份。在grant_date的年份而不是日期時間的組中,您應該很好。 –

+0

爲什麼只有那三個「2011」記錄被分組,而不是全部? –

回答

4

你應該使用:

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

代替:

GROUP BY dbo.PUBACC_HD.grant_date 

因爲它是現在,你是一個date值,可以記錄共享相同radio_service_code值之間的不同分組。

+0

謝謝您的解答以及答案。非常有幫助 – MattR

3

更改組通過要:

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

你只有選擇一年grant_date,所以你也必須通過相應

+0

堆棧不會讓我把這個標記爲一個答案這個快哈哈!這是我錯過的一件簡單的事情。非常感謝您的快速回答。 – MattR

+0

歡迎光臨。 –

2

編寫組,因爲你被grant_date而不是一年

分組
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科特 - Zaniewski狀態選擇和分組它的日期,那是問題。

+1

請只用(:)之前的方式:-) upvoting .. –

+1

這實際上是一個很好的解決方案,因爲它可以讓其他人更容易地查詢。希望兩個帖子都可以成爲答案 – MattR