2013-06-12 45 views
0

我有一個SQL Server表結構如下:是否可以按月分組?

Table name : calendar. 

列:

Calendar Date (smalldatetime) 
Working Day (bit) 

日曆日期上的所有日期,格式爲yyyy-MM-DD結構。 工作一天意味着我必須工作,如果是1,如果是週末或節假日則標記爲0

我要找回什麼:

Month  No Working Days Year 
------------------------------------ 
January 22    2011 
February 20    2011 
March  22    2011 
... 
December 10    2011 
January 15    2012 

所有的信息是存在的,但我只是不知道如何寫這樣的查詢,但我認爲這將是結構與此類似,在拋出一些奇特的日期時間函數的東西。請問

SELECT Sum(Working Day) 
     GROUP BY (Not a clue) 

回答

2

想必你有興趣在每年尋找工作日內在每個月和報告其每月的天數是。這會給你的是:

SELECT YEAR([Calendar Date]) As [YEAR], 
     Month([Calendar Date]) As [Month], 
     SUM([Working Day] As [Working Days] 
FROM [Calendar] 
GROUP BY YEAR([Calendar Date]), 
     Month([Calendar Date]) 
+0

我喜歡這個答案,但大家的是正確的。多謝你們 ! –

0

您的查詢看起來應該像這樣:

SELECT Sum(Working Day) 
WHERE Working Day = 1 
    GROUP BY MONTH(calenderDate) 

這將根據您的要求逐月分組。 更多日期時間函數你可以檢查出this link

0

像這樣的東西應該工作:

SELECT DATENAME(month, [Calendar Date]) 'Month', 
    COUNT(1) 'No Working Days', 
    YEAR([Calendar Date]) 'Year' 
FROM YourTable 
WHERE [Working Day] = 1 
GROUP BY DATENAME(month, [Calendar Date]), YEAR([Calendar Date]) 

根據您的數據和預期的結果,如果一個月沒有任何工作日,這個查詢贏得」 t返回該月的任何結果。相反,你可以使用類似這樣與CASE取出WHERE標準:

SELECT DATENAME(month, [Calendar Date]) 'Month', 
    COUNT(CASE WHEN [Working Day] = 1 THEN 1 END) 'No Working Days', 
    YEAR([Calendar Date]) 'Year' 
FROM YourTable 
GROUP BY DATENAME(month, [Calendar Date]), YEAR([Calendar Date]) 

你可能不需要case語句都 - 取決於你的表是否允許NULL您的位字段。如果它不允許NULLs,則可以使用SUM([Working Day]),因爲它會將0和1相加。

0

試試這個......這幾乎是一樣的上述與添加順序最答案由

SELECT YEAR(calendar_date) As [Year], 
MONTH(calendar_date) As [Month], 
SUM(working_day) As Working_Days 
FROM [calendar] 
GROUP BY YEAR(calendar_date) MONTH(calendar_date]) 
ORDER BY [Year], [Month]