【问题标题】:Merge oracle line合并预言机行
【发布时间】:2020-10-15 15:33:25
【问题描述】:

我的选择中有以下行

ColA | ColB | ColC | ColD
=========================
A       B      C1     X1
A       B      C2     X2
AA      BB     C3     Y1
AA      BB     C4     Y1

我愿意

ColA | ColB | ColC | ColD | ColE | ColF
=======================================
A       B      C1     X1     C2     X2
AA      BB     C3     Y1     C4     Y1     

我尝试使用 PIVOT,但总是出错。我有一个未定义的 ColE 和 ColF 值,但我知道对于特定的 ColA 和 B,我总是会得到 2 行。

谢谢

【问题讨论】:

    标签: sql oracle pivot


    【解决方案1】:

    如果你可以使用row_number的技巧,你可以使用PIVOT

    select *
    from
    (
    select colA,colB,colC,colD
          ,row_number() over (partition by colA,colB order by colA,colB) rn
      from data
    )
    pivot
    (
     max(ColC) as colC,max(ColD) as colD
     for rn in (1 as colE,2 as colF)
    );
    

    附:您可以在最后命名您想要的别名。根据您的示例,我只使用了第 1 行和第 2 行,但您可以尽可能多地提及 (hard code),这是pivot 的缺点。为了克服这个问题,下一步可能需要动态 SQL。

    Db<>Fiddle

    【讨论】:

    • 您的意思是什么结果,因为我提供的示例和小提琴没有空值?你能提供 dbfiddle 让我看看吗?
    猜你喜欢
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2021-05-31
    • 1970-01-01
    • 2019-04-14
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多