用mysql数据获得平衡

cfh9epnr  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(379)

我有以下数据

  1. Date Trans Detail Amt Payment
  2. 5/4/18 Inv Inv_1 100 0.00
  3. 5/4/18 Inv Inv_2 500 0.00
  4. 5/4/18 Payment Inv_1,Inv_2 0.0 400
  5. 5/6/18 Inv Inv_2 500 0.00
  6. 5/6/18 Payment Inv_2 0.0 600
  7. 5/6/18 credit credit 500 0.00
  8. 5/8/18 Inv Inv_3 100 0.00

我需要一个查询来得到下面结果中的余额

  1. Date Trans Detail Amt Payment Balance
  2. 5/4/18 Inv Inv_1 100 0.00 100
  3. 5/4/18 Inv Inv_2 500 0.00 600
  4. 5/4/18 Payment Inv_1,Inv_2 0.0 700 -100
  5. 5/6/18 Inv Inv_2 500 0.00 400
  6. 5/6/18 Payment Inv_2 0.0 600 -200
  7. 5/6/18 credit credit 500 0.00 -700
  8. 5/8/18 Inv Inv_3 100 0.00 -600

到目前为止我已经试过了,但是搞砸了,请告诉我有什么解决办法来平衡吗?

  1. SELECT t4.invoicedate,t4.transcation,t4.details,t4.amount,t4.payments,t4.balance,
  2. CASE WHEN t4.transcation='Payment Received' THEN @c:=@c+t4.balance -t4.payments END AS paymentbal
  3. FROM
  4. (SELECT @c:=0.0) AS dummyb
  5. CROSS JOIN (
  6. SELECT * FROM (SELECT t1.InvoiceHeaderId,t1.invoicedate,t1.transcation,t1.details,t1.amount,t1.payments,
  7. @d:= @d+t1.amount AS balance
  8. FROM
  9. (SELECT @d:=0.0) AS dummy
  10. CROSS JOIN
  11. ( SELECT a.InvoiceHeaderId,a.InvoiceDate,'Invoice'AS transcation,CONCAT(a.InvoiceNumber, ',',a.DueDate)details,a.Total AS amount,
  12. 0 payments FROM Table_Invoice a
  13. WHERE a.InvoiceDate BETWEEN '2018-02-02' AND '2018-02-06'
  14. GROUP BY a.InvoiceDate,a.InvoiceNumber,a.DueDate,a.InvoiceHeaderId)t1
  15. UNION ALL
  16. SELECT '',PaymentDate AS invoicedate,'Payment Received'AS transcation,ReferenceNumber AS details,0 amount,SUM(Total)payments,0 balance FROM
  17. Table_PaymentReceived WHERE PaymentDate BETWEEN '2018-02-02' AND '2018-02-06'
  18. GROUP BY PaymentDate
  19. UNION ALL
  20. SELECT '',CreditNoteDate AS invoicedate,'Return Credits ' AS transcation,ReferenceNumber AS details,SUM(Total)amount,0 payments,0 balance FROM
  21. Table_CreditNotes WHERE CreditNoteDate BETWEEN '2018-02-02' AND '2018-02-06'
  22. GROUP BY CreditNoteDate)t2 ORDER BY CAST(t2.invoicedate AS DATE),t2.transcation,t2.details)t4
imzjd6km

imzjd6km1#

查看下面的代码,这里是我们如何计算平衡的逻辑,它解决了您的问题。如果你还面临这个问题,请告诉我们。

  1. select Date,Trans,Detail,Amt,Payment(@r := @r + Amt)-(@p:=@p+Payment) balance
  2. from (select * from Table_Invoice order by date asc),
  3. (select @r:=0, @p:=0) s;

相关问题