SQL Server 2008/2012/2014/2016/2017/2019で累積合計を計算する方法【初心者向け】

2024-04-02

SQL Server で累積合計を取得する方法

SUM 関数と OVER 句を組み合わせることで、累積合計を簡単に計算できます。

SELECT
  日付,
  売上数,
  SUM(売上数) OVER (ORDER BY 日付) AS 売上数累計
FROM 売上テーブル;

上記の例では、売上テーブル売上数 列の累積合計を 売上数累計 列として計算しています。

サブクエリを使う方法でも累積合計を計算できます。

SELECT
  日付,
  売上数,
  (
    SELECT SUM(売上数)
    FROM 売上テーブル AS t
    WHERE t.日付 <= s.日付
  ) AS 売上数累計
FROM 売上テーブル AS s;
  • 简单的な累積合計を計算する場合: SUM 関数と OVER 句を使う方法の方が簡単です。
  • より複雑な累積合計を計算する場合: サブクエリを使う方法の方が柔軟性があります。

上記以外にも、累積合計を計算するには、CTE (Common Table Expressions) や窓関数を使う方法などがあります。




-- テーブル作成
CREATE TABLE 売上テーブル (
  日付 DATE,
  売上数 INT
);

-- データ挿入
INSERT INTO 売上テーブル (日付, 売上数) VALUES ('2023-01-01', 100);
INSERT INTO 売上テーブル (日付, 売上数) VALUES ('2023-01-02', 200);
INSERT INTO 売上テーブル (日付, 売上数) VALUES ('2023-01-03', 300);

-- 累積合計を計算
SELECT
  日付,
  売上数,
  SUM(売上数) OVER (ORDER BY 日付) AS 売上数累計
FROM 売上テーブル;

-- 結果
日付 | 売上数 | 売上数累計
------- | -------- | --------
2023-01-01 | 100 | 100
2023-01-02 | 200 | 300
2023-01-03 | 300 | 600

上記のサンプルコードを実行すると、以下の結果が出力されます。

日付 | 売上数 | 売上数累計
------- | -------- | --------
2023-01-01 | 100 | 100
2023-01-02 | 200 | 300
2023-01-03 | 300 | 600

売上数累計 列には、各行の日付までの累積合計が表示されています。




累積合計を取得する他の方法

CTE を使うことで、複雑な累積合計を計算することができます。

WITH 累積合計テーブル AS (
  SELECT
    日付,
    売上数,
    SUM(売上数) OVER (ORDER BY 日付) AS 売上数累計
  FROM 売上テーブル
)
SELECT
  日付,
  売上数,
  売上数累計
FROM 累積合計テーブル;

上記の例では、CTE を使って 累積合計テーブル を作成し、そのテーブルから累積合計を取得しています。

窓関数を使う

SQL Server 2012 以降では、窓関数を使って累積合計を計算することができます。

SELECT
  日付,
  売上数,
  SUM(売上数) OVER (ORDER BY 日付 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 売上数累計
FROM 売上テーブル;

上記の例では、SUM 関数と ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW オプションを使って、累積合計を計算しています。


sql-server sql-server-2008


SQL Server 2005、SSMS、およびその他のバージョンで別のポート番号を指定する

SQL Server Management Studio(SSMS)で別のポート番号を指定するには、接続プロパティでポート番号を明示的に設定する必要があります。これは、SQL Serverのデフォルトポートである1433以外のポートを使用している場合、またはファイアウォールなどの制限によりデフォルトポートを使用できない場合に必要です。...


BULK INSERT を使用してSQL Serverデータベースの2つのインスタンス間でデータをコピーする方法

BULK INSERT概要BULK INSERT は、高速で効率的に大量のデータをデータベースにコピーするために使用されるTransact-SQLステートメントです。この方法は、ソースとターゲットのデータベースが同じサーバー上にある場合に最適です。...


Transact-SQL クエリを使用して SQL Server ストアドプロシージャのソースコードを取得する方法

SQL Server Management Studio (SSMS) の GUI と同じソースコードをプログラムで取得する方法について解説します。SSMS の GUI で表示されるソースコードは、オブジェクト エクスプローラ でストアドプロシージャを選択して 右クリック > スクリプトの作成 > ストアドプロシージャとして を選択することで取得できます。...


T-SQLで文字列操作をマスターしよう! STRING_SPLIT 関数、SUBSTRING_INDEX 関数、STUFF 関数、PATINDEX 関数、SUBSTRING 関数、XML 処理などを徹底解説

T-SQL(Transact-SQL)は、Microsoft SQL Serverで使用されるデータベース言語です。文字列操作はデータ分析やレポート作成において重要であり、T-SQLには様々な文字列処理関数があります。その中でも、文字列を分割する関数は頻繁に使用されます。...


INFORMATION_SCHEMA.COLUMNSビューを使用して列名でテーブルを検索する方法

SQL Serverで指定された名前の列を含むすべてのテーブルを見つけるには、いくつかの方法があります。方法sys. columns ビューを使用するsys. columns ビューには、すべてのデータベース内のすべての列に関する情報が含まれています。 このビューを使用して、次のクエリを実行できます。...