2016-07-21 17 views
0

我想上一行的值添加到當前行入列累計SQL未能從上一行增加值到下一個

Select 
    Ddate as Date, etype, Reference, linkacc as ContraAcc, 
    Description, 
    sum(case when amount > 0 then amount else 0 end) as Debits, 
    sum(case when amount < 0 then amount else 0 end) as Credits, 
    sum(amount) as Cumulative 
from 
    dbo.vw_LT 
where 
    accnumber ='8400000' 
    and [DDate] between '2016-04-01 00:00:00' and '2016-04-30 00:00:00' 
    and [DataSource] = 'PAS11CEDCRE17' 
group by 
    Ddate, etype, Reference, linkacc, Description, Amount 

輸出(什麼我得到):

Date  Reference ContraAcc Description Debits Credits Cumulative 
-------------------------------------------------------------------------- 
2016-04-01  CC007 8000000  D/CC007  0  -39.19 -39.19 
2016-04-01  CC007 8000000  D/CC007  1117.09  0  1117.09 
2016-04-01  CC009 8000000  CC009  2600  0  2600 
的累積列

想下面(我需要):

Date  Reference ContraAcc Description Debits Credits Cumulative 
-------------------------------------------------------------------------- 
2016-04-01  CC007 8000000  D/CC007  0  -39.19 -39.19 
2016-04-01  CC007 8000000  D/CC007  1117.09  0  1077.9 
2016-04-01  CC009 8000000  CC009  2600  0  3677.9 
+0

你應該明白我的意思張貼一些取樣數據和預期結果,因爲你的問題不清楚。還要標記你的rdbms(oracle,mysql,sql-server),因爲答案會有很大的不同。你上面的查詢沒有機制,會知道其他行,所以他們將不會運行或累計總數 – Matt

+0

我已經添加了示例數據 – Tinashe

+0

我不明白什麼「在累積列第二行必須是-39.19 + 1117.09和等等「的意思 - 你能說清楚一點嗎?您輸出的內容是您目前得到的或您想要的內容? – Blorgbeard

回答

1

在我們深入研究解決方案,讓我告訴你,如果你使用的SQL Server版本超過2012年,有LAGLEAD,它可以幫助你解決這個問題。

我不會給你一個確切的查詢來解決你的問題(因爲我們不知道您對此表的主鍵是什麼),但你可以看到下面的例子

DECLARE @t TABLE 
(
    accountNumber VARCHAR(50) 
    ,dt    DATETIME 
    ,TransactedAmt BIGINT 
) 

INSERT INTO @t VALUES ('0001','7/20/2016',1000) 
INSERT INTO @t VALUES ('0001','7/21/2016',-1000) 
INSERT INTO @t VALUES ('0001','7/22/2016',2000) 

INSERT INTO @t VALUES ('0002','7/20/2016',500) 
INSERT INTO @t VALUES ('0002','7/21/2016',-500) 
INSERT INTO @t VALUES ('0002','7/22/2016',2000) 

;WITH CTE AS 
(
    SELECT ROW_NUMBER() OVER(Partition by accountNumber order by dt) as RN, * 
    FROM @t 
),CTE1 AS 
(
    SELECT *,TransactedAmt As TotalBalance 
    FROM CTE WHERE rn = 1 
    UNION 
    SELECT T1.*,T1.TransactedAmt + T0.TransactedAmt as TotalBalance 
    FROM CTE T1 
    JOIN CTE T0 
    ON T1.accountNumber = T0.accountNumber 
    AND T1.RN = T0.RN+1 
    AND T1.RN > 1 
) 
select * from CTE1 order by AccountNumber 
+0

對不起,我已經嘗試了上述和失敗,請協助 – Tinashe

+0

隨着給出的數據,我不明白,如果你想添加行indefinetly,即是否要添加所有行,不論日期,參考,對帳戶和所有..或累計金額應該停止一旦這些變化之一 – Surendra

+0

是的感謝您的迅速反應,它應該添加不規則的行,無論日期,參考,對帳戶和所有。 – Tinashe