2017-09-11 5 views
2

私は重複行を維持しながら、同じ幅の長いテーブルに値を戻す必要があります。複数行ピボットOracle 11gの

IE:私のテーブル:私が欲しいもの

Colname | ColValue | PK 
Field1 | 12   | 1 
Field2 | apple  | 1 
Field3 | blue  | 1 
Field3 | Red  | 1 

PK | Field1| Field2 | Field3 
1 |12  | apple |blue 
1 |12  | apple |red 

どのようにmax(colvalue)を実行し、次に2番目のField 3値を削除するかについて、この状況でピボット作業を行う方法を理解できないようです。フィールド/列の名前を必ずしも知っているわけではないので、動的な列のソリューションはすばらしいでしょう。私は、この表にタイムスタンプ列と他の「ランダム」の列を持っています

PK | Field1| Field2 | Field3 
1 |12  | apple |blue 

select PK as CompPK, 
        ColName, 
    Colvalue 

     from test1) 

     Pivot(
     max(colvalue) for ColNamein ('Field1' as Field1,'Field2' as Field2,'Field3' as Field3) 

もちろん、この戻りちょうど:私は何を持っている

編集

はい。理論的にはすべての可能な反復が欲しい。

+0

を試してみて何が複数の 'field2'の値を持っている場合は? –

+0

同じpkの場合、field1に3つの値がある場合、field2には4つの値があり、field3には5つの値がありますか?これらの値のすべての組み合わせ(3 * 4 * 5 = 60行)を取得しますか? – krokodilko

答えて

0

デモ

select * from(
    Select pk, colvalue as field1 
    From table1 
    Where colname ='Field1' 
) T1 
Full Join (
    Select pk, colvalue as field2 
    From table1 
    Where colname ='Field2' 
) T2 
Using (pk) 
Full join (
    Select pk, colvalue as field3 
    From table1 
    Where colname ='Field3' 
) T3 
Using (pk) 

http://sqlfiddle.com/#!4/ec147/3

| PK | FIELD1 | FIELD2 | FIELD3 | 
|----|--------|--------|--------| 
| 1 |  12 | apple | blue | 
| 1 |  12 | apple | Red |