0

私は3つのテーブルに参加する必要があります。つまり、テーブルの請求書アイテム支払いです。テーブル項目支払いは、請求書 IDに基づいてテーブル請求書に結合されます

ここで、請求書の日付までに、売上高、費用後の売上高、および支払いの合計を取得する必要があります。

これが私のクエリです

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

どうすればこの問題を解決できますか?

4

1 に答える 1

4

s をサブクエリに移動SUM()します。現時点では、支払いのすべての行が請求書のすべての行と照合され、デカルト結合が発生します。

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'
于 2013-05-01T07:10:21.413 に答える