来自不同表的SQL Sumation

时间:2018-09-21 13:44:42

标签: sql sql-server database

在这件事上我需要一些帮助。

我有三个桌子。

产品表, 发票表 现金表

产品表具有2列,如下所示(PID,品牌)

“发票表”具有两列,如下所示(PID,总销售额)

现金表有2列,如下所示(PID,总销售额)

PID可以有许多不同的品牌。

例如:

PID   BRAND
1     TEST1
2     TEST2
3     TEST3

所有三个表都通过PID列链接。

我在发票和现金表中有很多行。

我的问题是在BRAND明智的INVOICE和CASH表中对TOTALSALES的SUMMED值进行分组。

我尝试使用左联接,但是当联接中有2个以上的表时,总和值始终会增加。

我们将不胜感激任何帮助。

4 个答案:

答案 0 :(得分:1)

您可以使用union all,然后将两个表的结果汇总在一起:

select p.brand, sum(invoice_sales) as invoice_sales, sum(cash_sales) as cash_sales
from ((select pid, totalsales as invoice_sales, 0 as cash_sales
       from invoice i
      ) union all
      (select pid, 0, totalsales
       from cash c
      )
     ) ic join
     product p
     on ic.pid = p.id
group by p.brand;

答案 1 :(得分:1)

分别汇总“发票”和“现金”表中的数据

ComboBox

答案 2 :(得分:0)

对于按PID值联接表的结果,您需要两个单独的总和,并且需要按BRAND对记录进行分组

select sum(Invoice.TOTALSALES) as invoice_sales, sum(Cash.TOTALSALES) as cash_sales
from Products
join Invoice
on Products.PID = Invoice.PID
join Cash
on Products.PID = Cash.PID
group by Invoice.PID, Products.BRAND;

如果您不需要按产品分组,则只需从分组依据中删除Invoice.PID。

答案 3 :(得分:0)

另一种方法是使用子查询

select p.*,
       (select sum(i.TOTALSALES) from Invoice i where i.PID = p.PID) as TotalSalesInvoice,
       (select sum(c.TOTALSALES) from Cash c where c.PID = p.PID) as TotalSalesCash
from   Products p