我有一个带代码和状态的状态表A.其描述与特定名称有关。
Code Desc Name
01 INITIAL STATUS_A
02 SUCCESS STATUS_A
03 FAILED STATUS_A
04 FAILED STATUS_B
05 RETRY STATUS_C
06 SUCESS STATUS_D
依旧...... 现在我有一个表B作为主记录,表A中有代码关联。
ID column1 column2 column3 statusA statusB statusC statusD
432 XXXX YYYY ZZZZ 03 04 05 06
现在我需要形成一个查询来获取表A中代码描述的输出数据。
我使用左外连接完成了这个。有人可以建议更好的解决方案。
左外连接查询
Select b.column1 ,b.column2,
a1.Desc as Status_A_Desc ,
a2.Desc as Status_B_Desc,
a3.Desc as Status_C_Desc,
a4.Desc as Status_D_Desc
from B b left outer join
A a1 on a1.code = b.statusA and a1.Name ='STATUS_A'
left outer join
A a2 on a2.code = b.statusB and a2.Name ='STATUS_B'
left outer join
A a3 on a3.code = b.statusC and a3.Name ='STATUS_C'
left outer join
A a4 on a4.code = b.statusD and a4.Name ='STATUS_D'
where b.ID = 432
答案 0 :(得分:0)
您可以使用条件聚合:
select a.code,
max(case when a.name = 'Status_A' then a.desc end) as a,
max(case when a.name = 'Status_B' then a.desc end) as b,
max(case when a.name = 'Status_C' then a.desc end) as c,
max(case when a.name = 'Status_D' then a.desc end) as d
from a
group by a.code;
根据您的数据库,连接可能会更好。这样做的好处是,您可以添加任意数量的字段,基本上具有相同的性能。