我正在尝试连接3个表(tableA,tableB,tableC)都有3个字段(invoice,productClass,value).tableA和tableB在productClass字段中没有值,tableC在Value字段中没有值。所有表都具有公共值Invoice但不同的ProductClass,结果应该基于发票和ProductClass对值进行求和
create table tableA (
Invoice varchar(100),
ProductClass varchar(100),
Value int
)
create table tableB (
Invoice varchar(100),
ProductClass varchar(100),
Value int
)
create table tableC (
Invoice varchar(100),
ProductClass varchar(100),
Value int
)
insert into tableA
values
('001','',10),
('002','',20),
('003','',30),
('004','',40)
insert into tableB
values
('001','',20),
('002','',30),
('003','',40),
('004','',50)
insert into tableC
values
('001','aaa',null),
('002','aab',null),
('003','aac',null),
('004','aad',null)
select Invoice,ProductClass,sum(Value)
from(
select * from tableA
union
select * from tableB
union
select * from tableC
)tableD
group by Invoice,ProductClass
我希望结果能够回归
Invoice - 001,002,003,004
ProductClass - aaa,aab,aac,aad
Value - 30,50,70,90
你可以使用max()
作为ProductClass
,如果它的值有blank
或null
s:
select Invoice, max(ProductClass) as ProductClass, sum(Value) as Value
from(select * from tableA
union
select * from tableB
union
select * from tableC
)tableD
group by Invoice;