【问题标题】:pivot/unpivot oracle sql query with more than 2 resulting columns具有超过 2 个结果列的透视/取消透视 oracle sql 查询
【发布时间】:2021-02-28 00:02:48
【问题描述】:

我有一个查询,其一行输出如下:

Math MathStartDate  Science ScienceStartDate    Comp    CompStartDate   Hist    HistStartDate
12      11/12/2020  13      11/02/2020          6       11/01/2020      45      11/01/2020

我希望结果看起来像这样

Code    Value1  Value2
Math    12      11/12/2020
Science 13      11/02/2020
Comp    6       11/01/2020
Hist    45      11/01/2020

为了得到像上面这样的结果,我使用 unpivot 如下:

select * from (
select 
Math,
MathStartDate,
Science,
ScienceStartDate,
Comp,
CompStartDate,
Hist,
HistStartDate
from subjects vw, students s
where s.id = vw.id 
and id = 56
)
UNPIVOT INCLUDE NULLS(value1 FOR code in(Math,
Science,
Comp,
Hist));

这个输出看起来像,

MathStartDate ScienceStartDate CompStartDate HistStartDate code     value1
11/12/2020      11/02/2020      11/01/2020      11/01/2020  Math    12  
11/12/2020      11/02/2020      11/01/2020      11/01/2020  Science 13
11/12/2020      11/02/2020      11/01/2020      11/01/2020  Comp    6
11/12/2020      11/02/2020      11/01/2020      11/01/2020  Hist    45

如何让日期对齐以便获得所需的输出?

【问题讨论】:

    标签: sql oracle oracle11g pivot unpivot


    【解决方案1】:

    您可以取消透视多个列:

    ...
    UNPIVOT INCLUDE NULLS (
      (value1, startdate)
      FOR code in (
        (Math, MathStartDate) as 'Math',
        (Science, ScienceStartDate) as 'Science',
        (Comp, CompStartDate) as 'Comp',
        (Hist, HistStartDate) as 'Hist'
      )
    );
    
    CODE    | VALUE1 | STARTDATE
    ------- | ------ | ---------
    Math    |     12 | 12-NOV-20
    Science |     13 | 02-NOV-20
    Comp    |      6 | 01-NOV-20
    Hist    |     45 | 01-NOV-20
    

    db<>fiddle

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多