読者です 読者をやめる 読者になる 読者になる

当月と当年の集計を同時に出す

SQL
取引先 当月売上合計 当年売上合計
aaa 350 1000

みたいに、当月と当年*1の集計を同時に行いたい場合、

SELECT
    T.cust_name AS N'取引先'
  , SUM(CASE MONTH(T.date)
        WHEN MONTH(GETDATE()) THEN T.sales
                              ELSE 0
        END) AS N'当月売上合計'
  , SUM(T.sales) AS N'当年売上合計'
FROM
    SomeTable T
WHERE
    YEAR(T.date) = YEAR(GETDATE())
;

と、WHERE 句で範囲を当年に絞っておき、SELECT 句で当月を出すときに月で振り分ければいい。
これが年度になるともうちょっといろいろあるけど、基本的にはこの方針で出来る。


あー、SomeTable.date にインデックスがあるなら、T.date BETWEEN '2009-1-1' AND GETDATE() みたいに*2 *3 した方がいいかも。

*1:当日と当月とかでも可

*2:実際には '2009-1-1' の部分は現在の年を取得して、'-1-1'と連結して datetime にキャストするだとか必要

*3:それを言ったら GETDATE() の部分だって、外部から指定できるようにしておいて、その月の最終日に変換する必要があるか・・・