* 列を行に変換する [#f580411c]

** 前提 [#j8b44463]
テーブルt1:
  id | col1 | col2 | col3
 ----+------+------+------
   1 |   10 |   20 |   30


** UNION ALLを使って [#za1dfab0]

 SELECT col1 FROM t1 UNION ALL SELECT col2 FROM t1 UNION ALL SELECT col3 FROM t1

  col1
 ------
    10
    20
    30

** ピボットテーブルを使って [#x571d77d]
*** 前提 [#s7f0b986]
テーブルpivot:
  num
 -----
    1
    2
    3
    4
    5

*** SQL [#nd6ffd9a]
 SELECT CASE WHEN num = 1 THEN col1 WHEN num = 2 THEN col2 WHEN num = 3 THEN col3 END FROM t1 CROSS JOIN pivot
 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()を使って [#y9265d2c]

 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

*** 参考 [#f8aa419b]
http://www.postgresql.jp/document/9.1/html/functions-srf.html

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