表1
ID NAM N1 N2 N3
001 AAA 80 0 0表2
ID NAM N1 N2 N3
001 AAA 0 50 0表3
ID NAM N1 N2 N3
001 AAA 0 0 30 我用union all 合并后
ID NAM N1 N2 N3
001 AAA 80 0 0
001 AAA 0 50 0
001 AAA 0 0 30 我想要的 结果是
ID NAM N1 N2 N3
001 AAA 80 50 30 这个应该是 合并成一条记录
ID NAM N1 N2 N3
001 AAA 80 0 0表2
ID NAM N1 N2 N3
001 AAA 0 50 0表3
ID NAM N1 N2 N3
001 AAA 0 0 30 我用union all 合并后
ID NAM N1 N2 N3
001 AAA 80 0 0
001 AAA 0 50 0
001 AAA 0 0 30 我想要的 结果是
ID NAM N1 N2 N3
001 AAA 80 50 30 这个应该是 合并成一条记录
select a.ID,a.NAM,a.NUM N1,b.NUM N2,c.NUM N3 from 表1 a
inner join 表2 b
on a.ID=b.ID
inner join 表3 c
on b.ID=c.ID
select ID,NAM,max(N1) N1,max(N2) N2,max(N3) N3
from (你union all后的结果) t
group by t.ID,t.NAM;
--> 测试数据:@表1
declare @表1 table([ID] varchar(3),[NAM] varchar(3),[N1] int,[N2] int,[N3] int)
insert @表1
select '001','AAA',80,0,0--> 测试数据:@表2
declare @表2 table([ID] varchar(3),[NAM] varchar(3),[N1] int,[N2] int,[N3] int)
insert @表2
select '001','AAA',0,50,0--> 测试数据:@表3
declare @表3 table([ID] varchar(3),[NAM] varchar(3),[N1] int,[N2] int,[N3] int)
insert @表3
select '001','AAA',0,0,30SELECT
ID,NAM,MAX(N1) N1,MAX(N2) N2,MAX(N3) N3
FROM
(
SELECT * FROM @表1 UNION ALL
SELECT * FROM @表2 UNION ALL
SELECT * FROM @表3
)T GROUP BY ID,NAM
/*
ID NAM N1 N2 N3
---- ---- ----------- ----------- -----------
001 AAA 80 50 30
*/