Multirow Pivot Oracle 11g

时间:2017-09-11 10:48:01

标签: sql oracle pivot

我需要将长表中的值恢复为宽,同时保留重复的行:

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),然后删除第二个Field 3值。动态列解决方案非常棒,因为我不一定知道字段/列的名称。

我有什么:

select PK as CompPK,
                    ColName,
    Colvalue

        from test1)

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

这当然只返回:

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

我确实有一个时间戳列和其他随机的'这张桌子上的列。

修改

是。从理论上讲,我想要所有可能的迭代。

1 个答案:

答案 0 :(得分: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 |