最近のトラックバック

最近のコメント

2017年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

« 「Windowsは崩壊するしかないのか?」 | トップページ | Googleの技術ドキュメント日本語化 »

2008年6月 6日 (金)

行と列を入替える

モトネタはこちら
Ask Tom "Yup, ANOTHER Rows to Columns (or vice-versa) question. Sorry.", version 9.2.0

こういうデータに対して
TestID   Name      Phone
------- -------    ----------
1      John     1234567
2      Peter    9876543

こんなふうにしたい
Row1     Row2
--------    ----------
1         2
John       Peter
1234567    9876543

けど、こうなっちゃう↓という質問に対して
Row1     Row2
--------    ----------
1        NULL
John      NULL
1234567   NULL
NULL     2
NULL     Peter
NULL     9876543

Tomの回答は、
10g以前だと

ops$tkyte%ORA9IR2> select rw,

  2         max(decode( rn, 1, decode( rw, 1, to_char(testid), 2, name, 3, phone) )) r1,
  3         max(decode( rn, 2, decode( rw, 1, to_char(testid), 2, name, 3, phone) )) r2
  4    from (select testid, name, phone, row_number() over (order by testid) rn
  5            from test),
  6         (select level RW from dual connect by level <= 3)
  7   group by rw
  8  /

        RW           R1             R2
---------- ---------- ----------
         1              1              2
         2           John          Peter
         3         1234567     9876543

 

11gだと、pivot/unpivot関数を使って

ops$tkyte%ORA11GR1> with data
  2  as
  3  (
  4  select rn, data, thing
  5    from (select to_char(testid) testid, name, phone, to_char(rownum) rn from test )
  6     unpivot ( data for thing in ( testid , name, phone) )
  7  )
  8  select thing, row1, row2
  9    from data
10  pivot( max(data) for rn in ( '1' as row1, '2' as row2 ))
11  /

THING  ROW1         ROW2
------ ---------- ----------
TESTID 1                2
PHONE  1234567      9876543
NAME   John            Peter

« 「Windowsは崩壊するしかないのか?」 | トップページ | Googleの技術ドキュメント日本語化 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/181317/41444647

この記事へのトラックバック一覧です: 行と列を入替える:

« 「Windowsは崩壊するしかないのか?」 | トップページ | Googleの技術ドキュメント日本語化 »