列を行に変換する

前提

テーブル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