HOME >> Tips >> SQL Server Tips >> SQL

SQL で累積(数量、金額など)を取得する方法

 
文書番号:20342




SQL で数値型データの累積を取得する方法です。

例えば以下のように日ごとの売上実績数量や売上金額などを毎月の累積で取得したい場合などに便利です。

金額 累積
4月 1000 1000
5月 1200 2200
6月 1500 3700

【実行手順】

  1. テスト用のテーブルを作成して、サンプルデータを投入します。
    
    CREATE TABLE WORK_DATA(
         月度 smallint
        ,金額 decimal(18,0)
    )
    
    INSERT INTO WORK_DATA VALUES(4,1000)
    INSERT INTO WORK_DATA VALUES(5,1200)
    INSERT INTO WORK_DATA VALUES(6,1500)
    
  2. 「WORK_DATA」テーブル(別名:A1)に対して同じ「WORK_DATA」テーブル(別名:A2)を
    「A1 の月度が A2 以上のもの 」という条件で結合します。
    
    SELECT A1.月度
          ,A1.金額
          ,A2.金額
    FROM   WORK_DATA A1
    INNER JOIN WORK_DATA A2
    ON  A1.月度 >= A2.月度
    ORDER BY A1.月度
    
    このような結果になります。
    A1.金額 A2.金額
    4 1000 1000
    5 1200 1000
    5 1200 1200
    6 1500 1000
    6 1500 1200
    6 1500 1500
  3. これに対して 「月度」と「A1.金額」で GROUP BY して、「A2.金額」をSUMすると累計の結果を取得することができます。
    
    SELECT A1.月度
          ,A1.金額
          ,SUM(A2.金額) AS 累積
    FROM   WORK_DATA A1
    INNER JOIN WORK_DATA A2
    ON  A1.月度 >= A2.月度
    GROUP BY A1.月度,A1.金額
    ORDER BY A1.月度
    
    このような結果になります。
    金額 累積
    4 1000 1000
    5 1200 2200
    6 1500 3700