2015-05-04 3 views
0

Мне нужно вычислить значение столбца задолженности так, чтобы при openingBalance !=0 then indebtedness = openingBalnce+SalesTotal-SalesReturn. Но, когда openingBalnce = 0, то задолженность = задолженность за предыдущий месяц. Продажи с одинаковым SalesID. Если предыдущее значение = 0 получить предыдущее значение и по-прежнему получить предыдущее значение до имеют значение в этой колонке: Как сделать рекурсивный запрос в sql Server 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. 

И это выход я хочу.

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

Любая помощь в этой проблеме, пожалуйста, –

ответ

0

вы могли бы попробовать, как показано ниже CTE запроса

declare @tb table(SalesMonth int,SalesID int, 
openingBalance money,SalesTotal money,SalesReturn money,Indebtednes money) 
insert into @tb(SalesMonth,SalesID,openingBalance,SalesTotal,SalesReturn,Indebtednes) 
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) 


    ;with t1 as (select *, row_number() over 
    (order by salesid,SalesMonth) as rno from @tb), 
    t2(inde,rno,salid,mnth)as 
    (select case when openingBalance !=0 then 
    openingBalance+SalesTotal-SalesReturn 
    when openingBalance =0 then 0 end as inde, 
    rno,SalesID,SalesMonth from t1 where rno=1 
    union all 
    select case when openingBalance !=0 then 
    openingBalance+SalesTotal-SalesReturn 
    when openingBalance =0 then 
    case when SalesID=salid then inde+SalesTotal-SalesReturn 
    else 0 end end, 
    t1.rno,t1.SalesID,SalesMonth from t2 join t1 on t2.rno+1=t1.rno ) 
    select SalesMonth,SalesID,openingBalance, 
    SalesTotal,SalesReturn,inde as Indebtednes from t1 
    inner join t2 on t1.SalesID=t2.salid and 
    t1.SalesMonth=t2.mnth order by mnth,salid 
Смежные вопросы