ヨコをタテにするSQL
パフォーマンス考慮だかなんだか知らないが、非正規化の末路だか、行を列にしたうえ、さらに列をまとめてしまったらしい。
k | dt |
1 | "a" |
1 | "b" |
1 | "c" |
非正規化すると、
k | dt1 | dt2 | dt3 |
1 | "a" | "b" | "c" |
さらにすすめて、
k | dt |
1 | "abc" |
となった状態。
で、これをバラすSQLってのが、ヨコをタテにするSQLってわけで、
こんな感じ。
select k , substring(dt, seq, 1) from ( select 1 seq union all select 2 seq union all select 3 seq ) seq_tbl , ( select k, dt from tbl ) yoko_tbl order by k ;
mysqlでの結果はこう。
+------+-----------------------+ | k | substring(dt, seq, 1) | +------+-----------------------+ | 1 | a | | 1 | b | | 1 | c | | 2 | d | | 2 | e | | 2 | f | +------+-----------------------+
ちなみに元データ
mysql> select * from tbl; +------+------+ | k | dt | +------+------+ | 1 | abc | | 2 | def | +------+------+
設計もキモいけど、SQLもキモいよなあ。