2013-09-24 84 views
1

我有以下查詢,其中@BeginTime是月份的第一天,而@EndTime是月份的最後一天。通過sql查詢將年份和月份添加到組

SET @BeginTime = RTRIM(@BeginTime) + ' 00:00:00' 
SET @EndTime = RTRIM(@EndTime) + ' 23:59:59' 

select C.Name , COUNT(DISTINCT D.Id) from DriverLic D 
INNER JOIN Clov C WITH (NOLOCK) ON D.CId = C.CId 

AND ((D.RDate < @EndTime) 
AND (D.UrDate > @BeginTime)) 

group by C.Name 

我得到的輸出是這樣的:

Name Count(D.Id) 
AC  22 
AB  32 
CD  11 

我想獲得的輸出是這樣的:

Year Month Name Count(D.id) 
2013 8  AC  22 
2013 8  AB  32 
2013 8  CD  11 

有沒有一種方法,我可以做到這一點?

+2

1.您的參數不構成部分查詢? 2.我懷疑你很可能[錯誤地處理了你的日期範圍](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range -queries.aspx),我想你正在用'23:59:59'創建日期,所以你可以使用'between'運算符,忘記在'23:59:59'之後和00之前:00:00'。 – GarethD

+0

嘿,我正在使用BeginTime和EndTime,我把它放在了問題的外面,因爲我認爲它會讓讀者容易閱讀。我猜它會引起混淆。讓我編輯它以包含類似於我在代碼中的內容。謝謝您指出它。這是否有任何意義? – CodeNinja

回答

4

沒錯,

SELECT Year(yourDateColumn) AS 'Year', Month(yourDateColumn) AS 'Month', C.Name, COUNT(DISTINCT D.Id) 
from DriverLic D 
    INNER JOIN Clov C WITH (NOLOCK) ON D.CId = C.CId 
--WHERE your where conditions should go here... 
GROUP BY 
    Year(yourDateColumn), Month(yourDateColumn), C.Name 
+1

+1我唯一要添加的內容是Year和Month Columns Year(yourDateColumn)的年份別名。 –

+0

我按年分組(@BeginTime),月(@BeginTime),C.Name我得到一個錯誤「每個GROUP BY表達式都必須包含至少一個不是外部引用的列。 – CodeNinja

+2

@Agent 007嘗試從GROUP BY子句中刪除Year(@BeginTime),Month(@BeginTime)。 –