首页 > 解决方案 > sql查询根据数据不同的列对2个表的列求和

问题描述

在进行 sql 查询付出了很多努力之后,我最终陷入了混乱,到目前为止我所做的是这是 table1

select bill_no='2016-2017', B_id, COALESCE(sum(amount-gr),0) as amount, COALESCE (sum(tax),0) as tax, COALESCE(sum(amount_paid),0) as amount_paid, COALESCE(sum(gr),0) as gr,'sun4269' as forUser from tbl_addbill 
 where forUser='sun4269' and bill_date between '2016-04-01' and '2017-03-31' group by B_id;

bill_no     B_id     amount tax   amount_paid   gr  forUser
2016-2017   B-1       34875 0       0           0    sun4269
2016-2017   L-1       21014 0     19363         0    sun4269
2016-2017   P-1       10217 0       0           0    sun4269
2016-2017   S-1       30000 0    14000          0    sun4269
2016-2017   T-1       66237 0    21426          0    sun4269

这是表2

select bill_no,B_id,amount,tax,amount_paid,gr,forUser from tbl_addbill where forUser='sun4269' and bill_date is null and bill_no='2015-2016'       

bill_no     B_id    amount  tax    amount_paid  gr  forUser
2015-2016   K-1     181523  0      22159        0   sun4269
2015-2016   L-1     25266   0      4644         0   sun4269
2015-2016   P-1     122383  0      122383   113162  sun4269
2015-2016   A-1     38367   1827   0            0   sun4269
2015-2016   S-1     698262  18575  577120   113449  sun4269

可以看出table1和table2中的'B_id'列具有相同和不同的值(L-1重复但B-1不是),我想要的是L-1是否在表中重复,然后从两个表中将 amount,amount_paid,tax,gr sum 与“2016-2017”相加,如果 B-1 在任何表中都是唯一的,那么它也应该与“2016-2017”的值一起存在

标签: sqlsql-serversql-server-2012

解决方案


UNION您的 table1 和 table2 查询,并在'd 表上执行GROUP BY和关联的聚合函数。UNION

如果您只UNION从 table1 和 table2 中的一个开始,您会明白我的意思,因为结果将是一个表,其中包含 table1 和 table2 中的所有行;然后,您可以添加GROUP BY B_id所需的聚合函数(例如SUM())。


推荐阅读