2016-06-22 4 views
1

以下のクエリを使用してすべての行に対してバランスを得ることができます。..どのように私は、行ごとの収支を計算し、すべての借方と貸方のためのバランスを取得したい

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 | 
+-----------+--------------+---------------+ 
+0

あなたが先生に何を意味しています –

+0

あなたのサンプルデータをポスト?それは上記の私の質問の結果です。バランス欄を除いて – John

答えて

1

問題の簡略化されたバージョンを考えてみましょう:

debitcreditの列のみを含む表。

balanceTable:

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

だからあなたの場合には、それはのようになります:追加@balanceについて

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; 
+0

はい、これは私が必要としたクエリです。私を助けてくれてありがとう。神はいつもあなたを祝福します。 :D – John

+0

あなたは大歓迎です。それはあなたのために働いた良い音。あなたにも神のご加護がありますように。 – 1000111

+0

Sir私はs.TR_DATE> = CURDATE()を置き換えようとすると、GROUP BY s.TR_DATEのDESCを削除します。結果はBALANCE列で同じになりません。私は何をしなければならない? – John

1

何そして、あなたは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

のあなたの残りの部分を読んでいない
+1

OOPSと全く同じ回答1000111 :) – SIDU

+0

ありがとうございます。神様はいつもあなたを祝福します。 :D – John

+0

先生私はあなたの助けが必要ですhttp://stackoverflow.com/q/37981402/6122470 – John

関連する問題