1

我正在处理发票和付款,我有 4 张桌子:

1. Client (Client Data i.e client_id, client_name)
2. Invoice (Invoice Data i.e invoice_no, client_id, invoice_date)
3. Invoice Data (invoice_no, product_name, qty, rate, tax)
4. Payment (Payment Data i.e invoice_no, paid_value, date)

我正在连接这些表,但没有得到正确的结果。以下是 MySQL 语句:

SELECT invoices.invoice_no, clients.company_name,
SUM((((invoices_data.qty * invoices_data.rate) * (invoices_data.cgst + invoices_data.sgst + invoices_data.igst))/100) + (invoices_data.qty * invoices_data.rate)) AS invoice_value,
SUM(payments.value) AS paid_value
FROM invoices
INNER JOIN clients ON invoices.client_id = clients.id
INNER JOIN invoices_data ON invoices.invoice_no = invoices_data.invoice_no
LEFT JOIN payments ON payments.invoice_no = invoices.invoice_no
GROUP BY invoices.invoice_no

结果我得到了什么:

invoice_no | company_name | invoice_value | paid_value
-------------------------------------------------------
INVML1     | RX Companies | 92978.1       | 6400
-------------------------------------------------------
INVML2     | Demo Client  | 2540          | NULL

以上结果不正确,总发票金额为 30992.7,支付金额为 3200。请帮我解决这个问题

4

1 回答 1

0

在这种情况下,您可以在连接中有更多行在 sum 的结果中产生乘法,您可以尝试加入 sum 的子查询

select  t1.invoice_no
  , clients.company_name
  , t1.invoice_value
  , t2.paid_value 
from clients 
inner join  (
  SELECT  invoices.client_id, invoices.invoice_no
       , SUM((((invoices_data.qty * invoices_data.rate) * 
        (invoices_data.cgst + invoices_data.sgst + invoices_data.igst))/100) + 
        (invoices_data.qty * invoices_data.rate)) AS invoice_value
  FROM invoices
  INNER JOIN invoices_data ON invoices.invoice_no = invoices_data.invoice_no
  group by invoices.invoice_no,  invoices.client_id  
) t1 on t1.client_id = clinents.id
left join  (
select  payments.invoice_no, SUM(payments.value) AS paid_value 
from  payments 
group by  payments.invoice_no
) t2 on t2.invoice_no = t1.invoice_no
于 2019-10-29T06:43:09.133 回答