首页 > 解决方案 > 如何在需要按一个键列分组的 3 个表中加入和求和值

问题描述

我正在尝试加入 3 个表(tableA、tableB、tableC)都有 3 个字段(invoice、productClass、value)。tableA 和 tableB 在 productClass 字段中没有值,而 tableC 在 Value 字段中没有值。所有表都有共同的值 Invoice 但不同的 ProductClass 并且结果应该基于 invoices 和 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

标签: sql-servertsql

解决方案


如果它具有类似或s 的值,则可以使用max()for :ProductClassblanknull

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;

推荐阅读