列を行に変換する

前提

テーブルt1:

 id | col1 | col2 | col3
----+------+------+------
  1 |   10 |   20 |   30

UNION ALLを使って

SELECT col1 FROM t1 UNION ALL SELECT col2 FROM t1 UNION ALL SELECT col3 FROM t1
 col1
------
   10
   20
   30

ピボットテーブルを使って

前提

テーブルpivot:

 num
-----
   1
   2
   3
   4
   5

SQL

SELECT CASE WHEN num = 1 THEN col1 WHEN num = 2 THEN col2 WHEN num = 3 THEN col3 END 
FROM t1 CROSS JOIN pivot
 case
------
   10
   20
   30

SETOF関数 generate_series()を使って

SELECT CASE WHEN num = 1 THEN col1 WHEN num = 2 THEN col2 WHEN num = 3 THEN col3 END 
FROM t1 
CROSS JOIN generate_series( 1, 3 ) AS s(num)
 case
------
   10
   20
   30

参考

http://www.postgresql.jp/document/9.1/html/functions-srf.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2011-11-15 (火) 10:12:40 (2892d)