在这件事上我需要一些帮助。
我有三个桌子。
产品表, 发票表 现金表
产品表具有2列,如下所示(PID,品牌)
“发票表”具有两列,如下所示(PID,总销售额)
现金表有2列,如下所示(PID,总销售额)
PID可以有许多不同的品牌。
例如:
PID BRAND
1 TEST1
2 TEST2
3 TEST3
所有三个表都通过PID列链接。
我在发票和现金表中有很多行。
我的问题是在BRAND明智的INVOICE和CASH表中对TOTALSALES的SUMMED值进行分组。
我尝试使用左联接,但是当联接中有2个以上的表时,总和值始终会增加。
我们将不胜感激任何帮助。
答案 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