22,210
社区成员
发帖
与我相关
我的任务
分享
--- 批次入库表 ---
CREATE TABLE #TMP01
(
ID INT,
SKU_ID INT,
Num INT,
Cost INT,
CREATE_DATE DATETIME
)
INSERT INTO #TMP01 SELECT 1,5896,10,6,'2012-01-02 12:50:03.000'
INSERT INTO #TMP01 SELECT 7,5896,20,5,'2012-01-10 12:50:03.000'
INSERT INTO #TMP01 SELECT 9,5896,30,4,'2012-02-11 12:50:03.000'
INSERT INTO #TMP01 SELECT 2,4255,10,6,'2012-01-07 12:50:03.000'
INSERT INTO #TMP01 SELECT 3,4255,20,5,'2012-01-08 12:50:03.000'
----- 需要扣数的数据 ---
CREATE TABLE #TMP02
(
ID INT, --对应#TMP01 表的SKU_ID
CODE VARCHAR(20),
Num INT
)
INSERT INTO #TMP02 SELECT 4255,'ECV02',12
INSERT INTO #TMP02 SELECT 5896,'PT06',31
SELECT * FROM #TMP01
SELECT * FROM #TMP02
ID SKU_ID Num Cost CREATE_DATE
1 5896 0 6 2012-01-02 12:50:03.000
7 5896 0 5 2012-01-10 12:50:03.000
9 5896 29 4 2012-02-11 12:50:03.000
2 4255 0 6 2012-01-07 12:50:03.000
3 4255 18 5 2012-01-08 12:50:03.000
;with cte as
(select a.*,row_number() over(partition by a.sku_id order by a.id)rn,b.num as diffnum
from #TMP01 a inner join #TMP02 b on a.sku_id=b.id
)
,cte1 as
(
select *,case when num<diffnum then diffnum-num else 0 end as rz,case when num>diffnum then num-diffnum else 0 end as newnum
from cte where rn=1
union all
select b.*,case when b.num<a.rz then a.rz-b.num else 0 end as rz,case when b.num>a.rz then b.num-a.rz else 0 end as newnum
from cte1 a inner join cte b on a.sku_id=b.sku_id and a.rn=b.rn-1
)
select ID,SKU_ID,newnum,Cost,CREATE_DATE from cte1 order by sku_id
/*
ID SKU_ID newnum Cost CREATE_DATE
----------- ----------- ----------- ----------- -----------------------
2 4255 0 6 2012-01-07 12:50:03.000
3 4255 18 5 2012-01-08 12:50:03.000
1 5896 0 6 2012-01-02 12:50:03.000
7 5896 0 5 2012-01-10 12:50:03.000
9 5896 29 4 2012-02-11 12:50:03.000
*/