2015-04-23 2 views
1

У меня есть запрос, который возвращает запаса деталей, как показано ниже в SQL Server 2008показать баланс акций

enter image description here

На определенную дату запас баланса элементов A00001 и A00002 являются 40, 120 соответственно. Поэтому я хочу, чтобы распределить, что значения, как показано ниже (порядок по Артикул, DateofReceipt по убыванию)

enter image description here

Может ли один помочь мне, как я могу обновить результаты первого запроса (я могу хранить эти значения во временную таблицу , если необходимо), чтобы получить баланс запасов, как во второй таблице, без использования курсора?

Заранее благодарен!

ответ

0

попробовать

declare @tb table (itemCode varchar(10),DateofReceipt date,invno varchar(10), inqty int) 
    insert into @tb (itemcode,dateofReceipt,invno,inqty) values 
    ('A00001','20150401','Inv01',100), 
    ('A00001','20150410','Inv03',50), 
    ('A00002','20150405','Inv02',100), 
    ('A00002','20150415','Inv04',50) 

    declare @stock table(item varchar(10),qty int) 
    insert into @stock (item,qty) values 
    ('A00001',50),('A00002',120) 

    ;with cte as (select *,case when row_number() over(partition by itemCode order by DateofReceipt desc)=1 then qty else 0 end as stk, 
    row_number() over(order by itemcode, DateofReceipt desc) as rno 
    from @tb t inner join @stock s on t.itemCode=s.item), 
    ct1 (stock,bls,rno) as (select case when stk<=inqty then stk else inqty end as stock,case when stk<=inqty then 0 else stk-inqty end as bls,rno from cte where rno=1 
    union all select case when stk+bls<=inqty then stk+bls else inqty end as stock,case when stk+bls<=inqty then 0 else stk+bls-inqty end as bls,cte.rno from ct1 inner join cte on ct1.rno+1=cte.rno) 

    select itemcode,dateofReceipt,invno,inqty,stock from ct1 inner join cte on ct1.rno =cte.rno 
+0

Благодаря nasser_k .. Он хорошо работает – Narain

Смежные вопросы