SQLで検索結果を縦横変換する

プログラミング SQL Server
スポンサーリンク

SQLで検索結果を縦横変換する

SQLで取得した各行を一定のくくりで横に表示させたいときがあります。
そんなときはSQLで縦横変換を行います。

まずは準備

まずはテーブルやデータを準備します。
今回は各自の各教科ごとの得点を管理するテーブルを作成します。

--テーブルを準備する
CREATE TABLE #test_tbl
(
     番号 INT
    ,名前 VARCHAR(20)
    ,教科 VARCHAR(20)
    ,得点 INT
)

--データを準備する
INSERT INTO #test_tbl VALUES( 1, '太郎くん', '数学', 80 )
INSERT INTO #test_tbl VALUES( 1, '太郎くん', '英語', 70 )
INSERT INTO #test_tbl VALUES( 1, '太郎くん', '国語', 60 )

INSERT INTO #test_tbl VALUES( 2, '次郎くん', '数学', 30 )
INSERT INTO #test_tbl VALUES( 2, '次郎くん', '英語', 40 )
INSERT INTO #test_tbl VALUES( 2, '次郎くん', '国語', 50 )

INSERT INTO #test_tbl VALUES( 3, '花子さん', '数学', 100 )
INSERT INTO #test_tbl VALUES( 3, '花子さん', '英語', 90 )
INSERT INTO #test_tbl VALUES( 3, '花子さん', '国語', 80 )

普通に検索

作成したデータ普通に検索するとこんな漢字でしょうか。

--普通に検索すると
SELECT * FROM #test_tbl ORDER BY 番号,教科
1   太郎くん    英語     70
1   太郎くん    国語     60
1   太郎くん    数学     80
2   次郎くん    英語     40
2   次郎くん    国語     50
2   次郎くん    数学     30
3   花子さん    英語     90
3   花子さん    国語     80
3   花子さん    数学    100

人ごとに縦横変換して1行する

上記で用意したデータを人ごと、教科ごとに1行にして縦横変換してみます。

--検索結果を縦横変換する
SELECT
	 番号
	,名前
    ,MAX(CASE WHEN 教科='英語' THEN 得点 ELSE 0 END) AS 英語得点
    ,MAX(CASE WHEN 教科='数学' THEN 得点 ELSE 0 END) AS 数学得点
    ,MAX(CASE WHEN 教科='国語' THEN 得点 ELSE 0 END) AS 国語得点
FROM
    #test_tbl
GROUP BY
	 番号
	,名前
ORDER BY
    番号

DROP TABLE #test_tbl

結果は

1    太郎くん    70     80    60
2    次郎くん    40     30    50
3    花子さん    90    100    80

これで人ごとに教科ごとの得点を1行で取得することができます。
縦横変換の完成です。

タイトルとURLをコピーしました