来自两个表的数据透视表

时间:2019-04-05 09:56:44

标签: sql oracle pivot

我有两个表,Table_A是一个工作流跟踪器,如下所示:

表_A

Unique_ID    Status    Decision
1234         Open      Accept 
5678         Closed    Reject
9112         Closed    Accept
3141         Open      Reject

Table_B包含上面的一些唯一ID,以及已生成的各种警告消息(最多4条)。

表B

Unique_ID    Warning_Code    Warning
1234         1               Description1
1234         2               Description2
3141         1               Description2
5678         1               Description3
5678         2               Description1
5678         3               Description3

我很希望能够透视Table_B中的数据以行形式显示Table_A中所有的唯一ID,并具有显示该ID错误出现次数的列,并且重要的是,错误是什么。预期结果将是:

Unique_ID    Status    Decision    Warning_1     Warning_2     Warning_3      Warning_4
1234         Open      Accept      Description1  Description2      -              -
5678         Closed    Reject      Description3  Description1  Description3  Description4
9112         Closed    Accept           -             -            -              -    
3141         Open      Reject      Description3       -            -              -

我不确定SQL是否可以实现这种枢纽,因此不胜感激。

3 个答案:

答案 0 :(得分:1)

case when expression使用条件聚合

select 
  a.Unique_ID,Status,Decision,
  max(case when Warning_Code=1 then Warning end) as Warning_1,
  max(case when Warning_Code=2 then Warning end) as Warning_2,
  max(case when Warning_Code=3 then Warning end) as Warning_3,
  max(case when Warning_Code=4 then Warning end) as Warning_4
from tableA a inner join tableB b on a.Unique_ID=b.Unique_ID
group by a.Unique_ID,Status,Decision

答案 1 :(得分:0)

使用汇总时的用例

select Unique_ID,Status ,Decision,
max(case when Warning_Code=1 then Warning end) as waring1
max(case when Warning_Code=2 then Warning end) waring2,
max(case when Warning_Code=3 then Warning end) waring3
from tablea a join tableb b on a.Unique_ID=b.Unique_ID 
group by Unique_ID,Status ,Decision

答案 2 :(得分:0)

这是基本的数据透视查询,如果A中的任何行在B中没有任何决定,则只需进行左联接:

select *
  from a left join b using (unique_id)
  pivot (max(warning) for warning_code in (1 w1, 2 w2, 3 w3, 4 w4))

demo