SQL Serverでテーブルを回転させる

この記事では、SQL Serverでテーブルを回転させる方法について説明します。

元の製品バージョン: SQL Server
元の KB 番号: 175574

概要

この記事では、SQL Server テーブルを回転させる方法について説明します。 という名前 QTRSALESのテーブルがあるとします。 テーブルには、次の形式のデータを含む、、QUARTERおよび AMOUNTYEARがあります。

注:

1996 年の第 4 四半期の行はありません。

Year 四半期 Amount
1995 1 125,000.90
1995 2 136,000.75
1995 3 212,000.34
1995 4 328,000.82
1996 3 728,000.35
1996 2 422,000.13
1996 1 328,000.82

次に、次の形式でデータを表示できるようにテーブルを回転するとします。

YEAR Q1 Q2 Q3 Q4
1995 125,000.90 136,000.75 212,000.34 328,000.82
1996 328,000.82 422,000.13 728,000.35 0.00

テーブルのローテーションに使用するクエリは、この記事の次のセクションにあります。

テーブルを回転させるサンプル クエリ

テーブルのローテーションに使用するクエリを次に示します。

SELECT YEAR,
Q1= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 1 AND YEAR =
Q.YEAR),0),
Q2= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 2 AND YEAR =
Q.YEAR),0),
Q3= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 3 AND YEAR =
Q.YEAR),0),
Q4= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 4 AND YEAR =
Q.YEAR),0)
FROM QTRSALES Q
GROUP BY YEAR

大きなテーブルのクエリ

大きなテーブルの場合、このクエリはより高速になります。

SELECT YEAR,
SUM(CASE quarter WHEN 1 THEN amount ELSE 0 END) AS Q1,
SUM(CASE quarter WHEN 2 THEN amount ELSE 0 END) AS Q2,
SUM(CASE quarter WHEN 3 THEN amount ELSE 0 END) AS Q3,
SUM(CASE quarter WHEN 4 THEN amount ELSE 0 END) AS Q4
FROM qtrsales q
GROUP BY YEAR

関連情報

FROM - PIVOT と UNPIVOT の使用