2015-05-04 91 views
2

我需要計算indebtedness列的值,以便當openingBalance !=0 then indebtedness = openingBalnce+SalesTotal-SalesReturn。但是,當openingBalnce = 0 then indebtedness = indebtedness的前monthSalesSalesID相同。如果previous value = 0得到previous value並繼續得到previous value,直到此列有值:遞歸Sql查詢2008

SalesMonth SalesID openingBalance SalesTotal SalesReturn Indebtednes 
1   1  352200   0   5600   NULL 
1   2  50000   1100  0   NULL 
1   3  9500   6000  0   NULL 
2   1  0    0   1200   NULL 
2   2  0    300  0   NULL 
2   3  0    500  1000   NULL 
3   1  0    600  0   NULL 
3   2  0    200  0   NULL 
3   3  0    0   10   NULL 
. 
. 
. 
12   1  0    0   0   NULL 
12   2  0    0   0   NULL 
12   3  0    0   0   NULL 

與輸出是這樣的:

when openingBalance !=0 then Indebtednes=openingBalnce+SalesTotal-SalesReturn 
 

 
    when openingBalnce =0 then Indebtednes=Indebtednes (of the previous 
 
    month of the same SalesID)+SalesTotal-SalesReturn.

And this is the output i want. 
 

 
SalesMonth SalesID openingBalance SalesTotal SalesReturn Indebtednes 
 
    ---------- ------- -------------- ---------- ----------- ------------ 
 
    1   1    352200  0   5600   346600 
 
    ------------------------------------------------------------------------ 
 
    1   2    50000  1100   0    51100 
 
    ------------------------------------------------------------------------ 
 
    1   3    9500  6000   0    15500 
 
    ------------------------------------------------------------------------ 
 
    2   1    0   0   1200   345400 
 
    ------------------------------------------------------------------------ 
 
    2   2    0   300   0    51400 
 
    ------------------------------------------------------------------------ 
 
    2   3    0   500  1000   15000 
 
    ------------------------------------------------------------------------ 
 
    3   1    0   600   0    346000 
 
    ------------------------------------------------------------------------ 
 
    3   2    0   200   0    51600 
 
    ----------------------------------------------------------------------- 
 
    3   3    0   0   10    14990 
 
    ----------------------------------------------------------------------- 
 
    . 
 
    . 
 
    . 
 
    12   1    0   0   0    NULL 
 
    ---------------------------------------------------------------------- 
 
    12   2    0   0   0    NULL 
 
    ---------------------------------------------------------------------- 
 
    12   3    0   0   0    NULL

+0

可以添加銷售月= 1和銷售ID = 1的預期產出 – ughai

+0

Indebtednes = 346600 –

+0

我的意思是期望樣本輸出包含基於問題中上述樣本輸入的數據。您可以編輯問題併爲salesMonth = 1和SalesID = 1添加詳細信息 – ughai

回答

0

您可以執行CROSS APPLY或共同相關的子查詢。像這樣的東西。 SQL Fiddle

樣本數據

DECLARE @Sales TABLE (SalesMonth INT,SalesID INT,openingBalance MONEY,SalesTotal MONEY,SalesReturn MONEY,Indebtednes MONEY) 
insert into @Sales 
VALUES(1,   1,    352200,  0,   5600,   Null), 
(1,   2,    50000,  1100,   0,    Null), 
(1,   3,    9500,  6000,   0,    Null), 
(2,   1,    0,   0,   1200,   Null), 
(2,   2,    0,   300,   0,    Null), 
(2,   3,    0,   500,  1000,   Null), 
(3,   1,    0,   600,   0,    NULL), 
(3,   2,    0,   200,   0,    NULL), 
(3,   3,    0,   0,   10,    NULL) 

選擇查詢

SELECT C1.SalesMonth,C1.SalesID,C1.openingBalance,C1.SalesTotal,C1.SalesReturn,C2.Indebt 
FROM @Sales C1 
CROSS APPLY (
SELECT TOP 1 CASE WHEN openingBalance = 0 THEN NULL ELSE openingBalance + SalesTotal - SalesReturn END Indebt 
FROM @Sales C2 WHERE C2.SalesID = C1.SalesID AND openingBalance <> 0 AND C2.SalesMonth <=C1.SalesMonth ORDER BY SalesMonth Desc 
) C2 

更新查詢

UPDATE C1 
SET Indebtednes = 
(
SELECT TOP 1 CASE WHEN openingBalance = 0 THEN NULL ELSE openingBalance + SalesTotal - SalesReturn END Indebt 
FROM @Sales C2 WHERE C2.SalesID = C1.SalesID AND openingBalance <> 0 AND C2.SalesMonth <=C1.SalesMonth ORDER BY SalesMonth Desc 
) 
FROM @Sales C1 

SELECT * FROM @Sales 
+0

請再次查看我的帖子,並給我答案,我編輯帖子與我的輸出我想,謝謝你的幫助:) –