2012-07-12 22 views
0

您好我有一個SQL服務器數據庫,有3列Activity[start_date(datetime),end_date(datetime),title(string)] 我希望計算一整年,每個月有多少活動具有start_date,我的意思是我希望返回12個值(12個月),計算在幾個月內的活動,謝謝。如何在時間間隔內從SQL服務器數據庫返回值

回答

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 OUTER更改爲INNER。)

+0

yup,這是我想要的,包括有0個活動的月份,謝謝 – TBogdan 2012-07-12 21:12:12

+0

我們stinkin'需要[那個行數生成函數](https://connect.microsoft.com/SQLServer/feedback/details/258733 /加-A-內置-表的號碼)! – ErikE 2012-07-13 06:30:03

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行。 – 2012-07-12 19:43:44

相關問題