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)
4

4 に答える 4

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]) 
于 2013-06-12T14:43:33.433 に答える
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])

データと目的の結果によっては、月に営業日がない場合、このクエリはその月の結果を返しません。代わりに、基準を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でビット フィールドが許可されているかどうかによって異なります。許可されていない場合は、 0 と 1 を合計 するのでそのままNULLs使用できます。SUM([Working Day])

于 2013-06-12T14:39:53.393 に答える
0

Try this one… it’s pretty much the same as most answers above with the addition of order by

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]
于 2013-06-13T08:58:05.167 に答える