SQL Serverでテーブルを回転させる
この記事では、SQL Serverでテーブルを回転させる方法について説明します。
元の製品バージョン: SQL Server
元の KB 番号: 175574
概要
この記事では、SQL Server テーブルを回転させる方法について説明します。 という名前 QTRSALES
のテーブルがあるとします。 テーブルには、次の形式のデータを含む、、QUARTER
および AMOUNT
列YEAR
があります。
注:
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