簡體   English   中英

如何使用下面的查詢獲取每一行的余額

[英]How can I get the BALANCE for every row using the query below

我想獲取每個借方和貸方的余額,然后計算每行的余額。

SELECT SUM(IF(s.AMT>0 AND s.SLE_CODE=11,s.AMT,0)) AS DEBIT,
       SUM(IF(s.AMT<0 AND s.SLE_CODE=11,s.AMT,0)) * -1 AS CREDIT
FROM
  sldtl AS s
LEFT JOIN
  transtype
ON
  transtype.TransTypeID = s.TR_CODE
WHERE
  s.SL_BRCODE= 1 AND s.SL_CLIENTID= 267 AND s.SLC_CODE= 13 AND s.SLT_CODE= 15 AND 
  s.REF_NO= s.REF_NO AND s.TR_DATE >= (SELECT s.TR_DATE FROM sldtl AS s ORDER BY s.TR_DATE DESC LIMIT 1)-INTERVAL 6 MONTH
GROUP BY
  s.TR_DATE DESC, s.TR_CODE, s.TR_CTLNO

所需結果

 +-----------+--------------+---------------+
 |    DEBIT  |    CREDIT    |    BALANCE    |
 +-----------+--------------+---------------+
 |      0.00 |       700.00 |       -700.00 |
 |      0.00 |       700.00 |      -1400.00 |
 |    400.00 |         0.00 |      -1000.00 |
 |   2000.00 |       500.00 |        500.00 |
 +-----------+--------------+---------------+

讓我們考慮問題的簡化版本:

僅包含debitcredit列的表。 您要計算balance列:

余額表:

 debit    credit
   0        700 
   0        700
 400          0
2000        500


SELECT 
debit,
credit,
@balance := @balance + debit - credit AS balance
FROM balancetable, (SELECT @balance := 0) var;

SQL FIDDLE DEMO

因此,在您的情況下,它將是:

SELECT 
t.DEBIT,
t.CREDIT,
@balance := @balance + t.DEBIT - t.CREDIT AS BALANCE
FROM 
(
    SELECT SUM(IF(s.AMT>0 AND s.SLE_CODE=11,s.AMT,0)) AS DEBIT,
                 SUM(IF(s.AMT<0 AND s.SLE_CODE=11,s.AMT,0)) * -1 AS CREDIT
    FROM
        sldtl AS s
    LEFT JOIN
        transtype
    ON
        transtype.TransTypeID = s.TR_CODE
    WHERE
        s.SL_BRCODE= 1 AND s.SL_CLIENTID= 267 AND s.SLC_CODE= 13 AND s.SLT_CODE= 15 AND 
        s.REF_NO= s.REF_NO AND s.TR_DATE >= (SELECT s.TR_DATE FROM sldtl AS s ORDER BY s.TR_DATE DESC LIMIT 1)-INTERVAL 6 MONTH
    GROUP BY
        s.TR_DATE DESC, s.TR_CODE, s.TR_CTLNO 
) AS t , (SELECT @balance := 0) var;

在選擇結束時添加@balance怎么樣:

SELECT @debit : = SUM(IF(s.AMT>0 AND s.SLE_CODE=11,s.AMT,0)) AS DEBIT,
    @credit := SUM(IF(s.AMT<0 AND s.SLE_CODE=11,s.AMT,0)) * -1 AS CREDIT,
    @balance := @balance - @credit + @debit As BALANCE
FROM sldtl AS s
LEFT JOIN transtype ON transtype.TransTypeID = s.TR_CODE
JOIN (SELECT @balance := 0) AS tmp
WHERE s.SL_BRCODE = 1 
AND s.SL_CLIENTID = 267 
AND s.SLC_CODE = 13 
AND s.SLT_CODE = 15 
AND s.REF_NO = s.REF_NO 
AND s.TR_DATE >= (
    SELECT s.TR_DATE 
    FROM sldtl AS s 
    ORDER BY s.TR_DATE DESC 
    LIMIT 1
) - INTERVAL 6 MONTH
GROUP BY s.TR_DATE DESC, s.TR_CODE, s.TR_CTLNO

PS:我沒有閱讀其余的SQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM