2015-04-22 93 views
1

我在sqlite中有两个单独的表,称为发票和购买,我使用下面的查询来检索与项目7相关的所有发票和购买总和。事情是发票有三条记录和sql中返回的值是正确的,但购买等价物是错误的,因为只有一条记录,但返回值乘以三。来自两个表的sql总数

SELECT sum(invoice.invoice_net) As Sales, sum(purchase.total_order) As Purchases 
FROM invoice 
LEFT JOIN purchase 
ON purchase.projectID=invoice.projectID 
WHERE invoice.projectID=7 

如何加入这两条语句,以便正确返回数据。我个人知道他们工作得很好。我试过联盟,但是把数据放在一列中。

SELECT sum(invoice.invoice_net) As Sales 
FROM invoice 
WHERE projectID=7 

SELECT sum(purchase.order_total) As Purchases 
FROM purchase 
WHERE projectID=7 

回答

1

一种选择是sum使用子查询的结果,然后执行outer join

SELECT invoice.Sales, purchase.Purchases 
FROM (
    SELECT sum(invoice.invoice_net) As Sales, projectID 
    FROM invoice 
    GROUP BY projectID 
) invoice LEFT JOIN (
    SELECT sum(total_order) As Purchases, projectID 
    FROM purchase 
    GROUP BY projectID 
) purchase ON purchase.projectID=invoice.projectID 
WHERE invoice.projectID=7 

另一种选择是使用一个相关子查询:

SELECT sum(i.invoice_net) As Sales, 
    (SELECT sum(p.total_order) 
    FROM purchase p 
    WHERE p.projectID = i.projectID) As Purchases 
FROM invoice i 
WHERE i.projectID=7