簡體   English   中英

計算期初余額

[英]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進行運行總計。 請注意,我不太喜歡第一個SELECTEntryDate分組的EntryDate (因此,將操作的“日”作為最重要的時間),而第二個SELECTORDER BY SetNo ,這是因為第一個操作可以/將使一些SetNo “消失”( MIN(CM.SetNo)

暫無
暫無

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

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