2010年12月20日月曜日

SQL Server 日毎、月毎の集計

datetime型のフィールドで集計しようとした時に、
YEAR,MONTH,DAY関数は用意されていますが、
"yyyy/mm/dd" や"yyyy/mm"を返す関数は用意されていないので、

/月毎/
SELECT
 YEAR(日付) AS 年,
 MONTH(日付) AS 月,
 COUNT(*) AS 計数
FROM TABLE
GROUP BY YEAR(日付), MONTH(日付) 

とか

/月毎/
SELECT
 CAST(YEAR(日付) AS VARCHAR) + '/' + CAST(MONTH(日付) AS VARCHAR) AS 年月,
 COUNT(*) AS 計数
FROM TABLE
GROUP BY CAST(YEAR(日付) AS VARCHAR) + '/' + CAST(MONTH(日付) AS VARCHAR)

とかしないといけません。
こんな時はCONVERT関数を使った方がスマートです。

/日毎/
SELECT
 CONVERT(VARCHAR, 日付, 111) AS 年月日,
 COUNT(*) AS 計数
FROM TABLE
GROUP BY CONVERT(VARCHAR, 日付, 111)

/月毎/
SELECT
 SUBSTRING(CONVERT(VARCHAR, 日付, 111),1,7) AS 年月,
 COUNT(*) AS 計数
FROM TABLE
GROUP BY SUBSTRING(CONVERT(VARCHAR, 日付, 111),1,7) AS 年月

参考
CAST および CONVERT
日付と時刻のデータ型および関数
SQL-Sqrverで月ごとにグルーピングして集計したい

0 件のコメント:

コメントを投稿