Получить баланс с данными MySQL - PullRequest
0 голосов
/ 04 мая 2018

У меня есть следующие данные

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

Мне нужен запрос, чтобы получить баланс в приведенном ниже результате

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

Пока я пытался, но все испортилось. Пожалуйста, дайте мне знать какое-нибудь решение, чтобы получить баланс?

SELECT t4.invoicedate,t4.transcation,t4.details,t4.amount,t4.payments,t4.balance,
CASE WHEN  t4.transcation='Payment Received'  THEN @c:=@c+t4.balance -t4.payments   END  AS paymentbal  
 FROM 
(SELECT @c:=0.0) AS dummyb
CROSS JOIN (
SELECT * FROM (SELECT t1.InvoiceHeaderId,t1.invoicedate,t1.transcation,t1.details,t1.amount,t1.payments,
  @d:= @d+t1.amount  AS balance 
    FROM 
(SELECT @d:=0.0) AS dummy
CROSS JOIN   

  ( SELECT a.InvoiceHeaderId,a.InvoiceDate,'Invoice'AS transcation,CONCAT(a.InvoiceNumber, ',',a.DueDate)details,a.Total AS amount,
 0 payments  FROM Table_Invoice a
  WHERE  a.InvoiceDate BETWEEN '2018-02-02' AND '2018-02-06' 
  GROUP BY  a.InvoiceDate,a.InvoiceNumber,a.DueDate,a.InvoiceHeaderId)t1
  UNION ALL
 SELECT  '',PaymentDate AS invoicedate,'Payment Received'AS transcation,ReferenceNumber AS details,0 amount,SUM(Total)payments,0 balance FROM 
    Table_PaymentReceived  WHERE PaymentDate BETWEEN '2018-02-02' AND '2018-02-06'
    GROUP BY PaymentDate
 UNION ALL
  SELECT '',CreditNoteDate AS invoicedate,'Return Credits ' AS transcation,ReferenceNumber AS details,SUM(Total)amount,0 payments,0 balance FROM 
    Table_CreditNotes   WHERE CreditNoteDate BETWEEN '2018-02-02' AND '2018-02-06'
    GROUP BY CreditNoteDate)t2 ORDER  BY CAST(t2.invoicedate AS DATE),t2.transcation,t2.details)t4

1 Ответ

0 голосов
/ 04 мая 2018

Проверьте код ниже, вот логика, как мы рассчитываем баланс, это решает вашу проблему. Дайте нам знать, если вы все еще сталкиваетесь с проблемой.

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