【问题标题】:Multirow Pivot Oracle 11g多行数据透视 Oracle 11g
【发布时间】:2018-02-19 14:05:45
【问题描述】:

我需要在保留重复行的同时恢复长表中的值:

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) 然后删除第二个字段 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

我在这张表上有一个时间戳列和其他“随机”列。

编辑

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

【问题讨论】:

  • 如果您有多个field2 值怎么办?
  • 如果对于同一个pk,field1有3个值,field2有4个值,field3有5个值怎么办?您想获取这些值的所有可能组合(3*4*5=60 行)吗?

标签: sql oracle pivot


【解决方案1】:

试试

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 |

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多