2012-07-12 2 views

답변

0

당신이 그 달의 활동이 없었다하더라도 결과에 달을 포함해야하는 경우 및/또는,이 하나 고려해 볼 수 있습니다 start_date에 인덱스가있는 경우 :

DECLARE @year INT; 
SET @year = 2012; 

;WITH n AS 
(
    SELECT TOP (12) m = DATEADD(MONTH, ROW_NUMBER() OVER 
    (ORDER BY name)-1, DATEADD(YEAR, @year-1900, 0)) 
    FROM sys.all_objects ORDER BY name 
) 
SELECT [Month] = n.m, ActivityCount = COUNT(t.title) 
FROM n 
LEFT OUTER JOIN dbo.unspecified_table_name AS t 
    ON t.start_date >= n.m 
    AND t.start_date < DATEADD(MONTH, 1, n.m) 
GROUP BY n.m 
ORDER BY [Month]; 

(주어진 달에 활동이 없을 때 행을 원하지 않으면 LEFT OUTERINNER으로 변경하십시오.

+0

그래, 내가 원했던 바, 0 액티비티가있는 달을 포함한다. 덕분에 – TBogdan

+0

우리는 [그 행 번호 생성 기능] (https://connect.microsoft.com/SQLServer/feedback/details/258733)이 필요하다./add-a-built-in-table-of-numbers)! – ErikE

0
select month(start_date) as Month, count(*) as Count 
from Activity 
where year(start_date) = 2011 
group by month(start_date) 
order by month(start_date) 
+0

단지 하나의 활동이있는 경우에만 12 행만 반환합니다. –

관련 문제