[英]Calculate opening balance
我需要一些有關計算運行余額的幫助。 以下是表D009040
輸出。
LBrCode MainAcctId EntryDate SetNo DrCr FcyTrnAmt
15 20060000000000030000000100000000 4/27/2015 11332 C 200
15 20060000000000030000000100000000 5/7/2015 8050 D 500
15 20060000000000030000000100000000 5/18/2015 11270 D 500
15 20060000000000030000000100000000 6/1/2015 13009 C 500
15 20060000000000030000000100000000 6/28/2015 81916 C 22.17
15 20060000000000030000000100000000 7/20/2015 11196 C 500
15 20060000000000030000000100000000 4/20/2015 11127 C 1000
15 20060000000000030000000100000000 4/28/2015 88017 C 6.37
15 20060000000000030000000100000000 5/11/2015 11176 D 500
15 20060000000000030000000100000000 5/25/2015 11201 D 300
15 20060000000000030000000100000000 6/15/2015 11075 C 500
15 20060000000000030000000100000000 7/6/2015 11069 C 500
15 20060000000000030000000100000000 7/28/2015 97098 C 32.43
15 20060000000000030000000100000000 4/16/2015 1019 C 3000
15 20060000000000030000000100000000 4/27/2015 11333 D 200
15 20060000000000030000000100000000 5/11/2015 11175 C 500
15 20060000000000030000000100000000 5/25/2015 11200 C 500
15 20060000000000030000000100000000 6/8/2015 10700 C 500
15 20060000000000030000000100000000 6/29/2015 11464 C 500
15 20060000000000030000000100000000 7/27/2015 10701 C 500
15 20060000000000030000000100000000 4/20/2015 11128 D 1000
15 20060000000000030000000100000000 5/7/2015 8049 C 500
15 20060000000000030000000100000000 5/18/2015 11269 C 500
15 20060000000000030000000100000000 5/28/2015 82065 C 14.86
15 20060000000000030000000100000000 6/22/2015 11101 C 500
15 20060000000000030000000100000000 7/13/2015 11401 C 500
我想計算借方和貸方條目,並獲取每個日期的運行余額。 我正在使用以下查詢。
SELECT CM.LBrCode, CM.MainAcctId, CM.EntryDate,
sum(CASE WHEN CM.DrCr='C' THEN CM.FcyTrnAmt
WHEN CM.DrCr='D' THEN CM.FcyTrnAmt * -1 END)
OVER (PARTITION BY CM.MainAcctId ORDER BY CM.SetNo) As Amount,
sum(CASE WHEN CM.DrCr='C' THEN CM.FcyTrnAmt
WHEN CM.DrCr='D' THEN CM.FcyTrnAmt * -1 END)
OVER (PARTITION BY CM.MainAcctId ORDER BY CM.SetNo) As Amount
FROM D009040 CM
它計算運行余額,但是如果同一天有兩筆交易,它將計算並顯示兩筆余額。 我的要求是,如果同一天有兩筆交易,則進行借記或貸記並顯示該日期的最新單筆余額。
關於如何執行此操作的任何想法?
大概是這樣的:
; WITH Base AS
(
SELECT MIN(CM.LBrCode) LBrCode,
CM.MainAcctId,
CM.EntryDate,
MIN(CM.SetNo) SetNo,
SUM(CASE
WHEN CM.DrCr = 'C' THEN CM.FcyTrnAmt
WHEN CM.DrCr = 'D' THEN CM.FcyTrnAmt * -1
END) FcyTrnAmt
FROM #D009040 CM
GROUP BY CM.MainAcctId, CM.EntryDate
)
SELECT B.LBrCode,
B.MainAcctId,
B.EntryDate,
B.FcyTrnAmt,
SUM(B.FcyTrnAmt) OVER (PARTITION BY B.MainAcctId ORDER BY B.SetNo) Balance
FROM Base B
我首先在Base
計算當天的總移動量,然后在第二個SELECT
進行運行總計。 請注意,我不太喜歡第一個SELECT
按EntryDate
分組的EntryDate
(因此,將操作的“日”作為最重要的時間),而第二個SELECT
是ORDER BY
SetNo
,這是因為第一個操作可以/將使一些SetNo
“消失”( MIN(CM.SetNo)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.