[英]How can I position the last row of my query to appear below the result? (MySQL)
[英]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 |
+-----------+--------------+---------------+
讓我們考慮問題的簡化版本:
僅包含debit
和credit
列的表。 您要計算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;
因此,在您的情況下,它將是:
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.