从两个表中转动数据

问题描述 投票:0回答:3

我有两个表,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,所以任何帮助表示赞赏。

sql oracle pivot
3个回答
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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.