读书人

求SQL语句()

发布时间: 2013-04-20 19:43:01 作者: rapoo

求SQL语句(在线等)
想了很久,都不知道怎么开始写,求各位老大帮助。

我现在有一个表,如表一,
里面储存的是每年物料每周的需求数量,从第1周至52周
第0周,储存的是目前仓库的库存量。

我现在想得到表二,

w0(现有量)- 最早一次需求(201311 13年11周 ),如果大于0,这这周就等于0(不需再购,有库存)
然后继续下一周
W0-W11-W12(500-300-300),这时-100,表明这一周需要购100,因此这里显示100。
之后就不需要再减,直接取表一中的需求数量。

如果现W0等于负数,那需要把这个需求和算在第一个需求上。
(如W0=-19,W11 100 ,那么W11=19+100 =119,之后的周就直接取表一的需求)

表一:
WEEK ItemID Qty
201300 1001 500
201311 1001 300
201312 1001 300
201313 1001 500
201314 1001 0
……
201352 1001

201300 1002 0
201311 1002 300
201312 1002 90
……


表二:
WEEK ItemID Qty
201311 1001 0 (500-300)>0
201312 1001 100 (500-300-300)=abs(-100)
201313 1001 500 (如果上一个结果小于0,从这行开始就等于表一值)
201314 1001 0
……
201352 1001

201300 1002 0
201311 1002 300
201312 1002 90
……





递归 SQL 存储过程
[解决办法]
哥们 咱俩的问题好像有点类似啊
http://bbs.csdn.net/topics/390431456
[解决办法]

引用:
您好,OrchidCat。我将您的语句移到生产环境后,
测试了一下,还有一些小问题,比如下列:
WEEK ITEMID QTY
0010-03-091MT2794
1310-03-091MT27-66
1410-03-091MT27-116
1610-03-091MT27-58
1710-03-091MT27-2……



;WITH TT
AS
(SELECT WEEK,itemid,CASE WHEN RIGHT(CONVERT(VARCHAR,week),2) = '00' THEN qty ELSE - qty END AS qty
FROM tb1),

T1
AS(
SELECT TOP 100 A.week,a.itemid,a.qty,CASE WHEN SUM(b.qty) > 0 THEN 0 ELSE SUM(b.qty) END AS sqty,
CASE WHEN SUM(b.qty)<0 THEN 1 ELSE 0 END AS mark
FROM TT A
INNER JOIN TT B ON A.itemid = B.itemid AND A.[week] >= b.[week]
GROUP BY A.week,a.itemid,a.qty
ORDER BY a.itemid,a.week
),

T2
AS(
SELECT *,ROW_NUMBER() OVER(PARTITION BY itemid,mark ORDER BY week ) AS num
FROM T1)

SELECT week ,
itemid ,


CASE WHEN EXISTS ( SELECT 1 --这个地方加个判断即可
FROM T2
WHERE sqty < 0 )
THEN CASE WHEN sqty < 0
AND num = 1 THEN ABS(sqty)
ELSE ABS(qty)
END
ELSE CASE WHEN num = 1 THEN ABS(qty)
ELSE 0
END
END AS qty
FROM T2

读书人网 >SQL Server

热点推荐