如何写多表联合查询语句
表A 表B 表C 表D
物料代码 图号 批次 物料代码 数量 批次 物料代码 数量 批次 物料代码 数量
a1 1001 X101 a1 10 Y101 b1 5 Z101 c1 54
b1 1001 X102 a2 4 Y102 b2 4 Z102 c2 1
c1 1001 X103 a1 6 Y103 b2 8 Z103 c2 96
a2 1002 X104 a1 1 Y104 b1 3 Z104 c2 7
b2 1002
c2 1002
结果
图号 表B物料 表B数量 表C物料 表C数量 表D物料 表D数量
1001 a1 b1 c1
1002 a2 b2 c2
------解决方案-------------------- 引用: Quote: 引用:
修改了一下查询语句:
select a.图号,
MIN(case when flag = 'B' then t.物料代码 else null end) as 表B物料,
sum(case when flag = 'B' then t.数量 else 0 end) as 表B数量,
MIN(case when flag = 'C' then t.物料代码 else null end) as 表C物料,
sum(case when flag = 'C' then t.数量 else 0 end) as 表C数量,
MIN(case when flag = 'D' then t.物料代码 else null end) as 表D物料,
sum(case when flag = 'D' then t.数量 else 0 end) as 表D数量
from 表A a
inner join
(
select 物料代码,数量,'B' flag from 表B union all
select 物料代码,数量,'C' from 表C union all
select 物料代码,数量,'D' from 表D
)t
on a.物料代码 = t.物料代码
group by a.图号
/*
图号 表B物料 表B数量 表C物料 表C数量 表D物料 表D数量
1001 a1 17 b1 8 c1 54
1002 a2 4 b2 12 c2 104
*/
可以直接用Select子查询吗,因为物料里面有些业务是空的
改成这样,你再试试:
select a.图号,
MIN(case when flag = 'B' then t.物料代码 else null end) as 表B物料,
sum(case when flag = 'B' then t.数量 else 0 end) as 表B数量,
MIN(case when flag = 'C' then t.物料代码 else null end) as&nb