SQLでデータを横に並べる方法

SQLと書かれた画面 SQL

こんにちは!ぽこです。

今回は、SQLでデータを横に並べる方法についてです。横一列にするのではなく、ある条件で横に並べていきます。

変換イメージ

今回紹介する変換は、次のような場合に使うことができます。

例として、学校を考えます。

元データ:純粋に生徒を並べたデータ

学年クラス名前
11生徒A
21生徒B
32生徒C
12生徒D
21生徒E
31生徒F
12生徒G
12生徒H
22生徒I

変換後データ:学年ごと、クラスごとに分けたデータ

1組2組
学年出席番号名前名前
11生徒A 生徒D
12NULL 生徒G
13 NULL 生徒H
21生徒B生徒I
22生徒ENULL
31生徒F生徒C

このように、縦に学年、横にクラスという形で並べ替えます。

また、学年ごとになるように、空いている名前にはNULLが入ります。

コード

まず、次のようにして定数を定義します。

ここで、@rownum_AAが1列目(1組)、@rownum_BBが2列目(2組)の番号になります。この定数を使って、次のようなSQLを実行します。

ここで、前記のイメージとは

col1 : 学年、col2 : クラス、col3 : 名前となります。

このコードでは、いったん1学年のみできるイメージなので、3学年行うには分割してUNIONします。

解説

細かい解説です。

これで、col2が1となっている行(1組)を抜き出して番号を付けます。同様に、

これでcol2が2となっている行 (2組) を抜き出して番号を付けます。

それらをfull outer join し、rownum, col1を条件にすることで、並べることができます。

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