2013-05-01 103 views
0

我有3個表需要加入即表發票項目支付。表項目支付將加入到表發票基於發票編號SUM返回錯誤的值時加入3表 - MS SQL

現在我需要得到SUM 銷售,銷售成本支付後按發票日期。

所以這是我的查詢

SELECT SUM((I.price * qty) - (I.price * qty * discount)) as totalSales,SUM((I.price * qty) - (I.price * qty * discount)-costItem) as salesAfterCost, SUM(PAY.amount) as paymentReceived 
FROM tbl_inv B LEFT JOIN tbl_item I ON B.id = I.id_invoice 
LEFT JOIN tbl_payment PAY ON B.id = PAY.id_invoice 
WHERE B.dateInv = '2013-04-01' 
GROUP BY B.id,b.dateInv; 

並把結果返回這樣

totalSales salesAfterCost paymentReceived 
75.540000 67.540000  622.8000 

但是,當我與此查詢覈實,以獲取支付總額,它會與不同的價值迴歸。

SELECT SUM(PAY.amount) paymentReceived 
FROM tbl_inv B LEFT JOIN tbl_payment PAY ON B.id = PAY.id_invoice 
WHERE B.dateInv = '2013-04-01'; 

結果:

paymentReceived 
155.7000 

,查詢銷售

SELECT SUM((I.price * qty) - (I.price * qty * discount)) as totalSales,SUM((I.price * qty) - (I.price * qty * discount)-costItem) as salesAfterCost 
FROM tbl_inv B LEFT JOIN tbl_item I ON B.id = I.id_invoice 
WHERE B.dateInv = '2013-04-01'; 

結果:

totalSales salesAfterCost 
37.770000 33.770000 

我怎樣才能解決這個事情?

+0

@Damien_The_Unbeliever是正確的。但是,如果您可以將付款加入發票上的特定項目,也可以解決。 – davmos 2013-05-01 07:17:49

+0

@davmos - 考慮到付款乘以4,銷售額乘以2,我不認爲發票和付款之間存在1-1對應關係。 – 2013-05-01 07:20:33

+0

當然@Damien_The_Unbeliever,但我沒有這麼說。我只是暗示了**發票上的項目**與付款之間的1-1關係的可能性。可能不可能,但我認爲我會把它放到混合中來幫助理解。 – davmos 2013-05-01 07:28:25

回答

3

移動SUM() s轉換的子查詢 - 此刻,從支付每一行正在對每一行從發票匹配,造成了笛卡兒連接

SELECT I.totalSales,I.salesAfterCost, PAY.paymentReceived 
FROM tbl_inv B 
LEFT JOIN (
    select id_invoice,SUM((I.price * qty) - (I.price * qty * discount)) as totalSales, 
     SUM((I.price * qty) - (I.price * qty * discount)-costItem) as salesAfterCost 
    from tbl_item group by id_invoice) I 
     ON 
     B.id = I.id_invoice 
LEFT JOIN (
    select id_invoice,SUM(amount) as paymentReceived 
    from tbl_payment group by id_invoice) PAY 
     ON 
     B.id = PAY.id_invoice 
WHERE B.dateInv = '2013-04-01' 
+0

謝謝你的幫助,像冠軍一樣工作 – Chuki2 2013-05-01 15:15:57