一个实例问题,入库分配SQL问题

marongc 2014-12-25 04:54:39
计划日期,计划数量,入库数量
2-1,4000,0
2-3,4500,0
2-5,4500,0

现在入库情况
2-1 3000
2-3 6000

我想要的结果
2-1,4000,3000
2-3,4500,4500
2-5,4500,500


...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
marongc 2014-12-26
  • 打赏
  • 举报
回复
如果2-5再入库5000呢,最后一笔多出来的数量,要显示在最后一条里面,这样要怎么写代码?
marongc 2014-12-25
  • 打赏
  • 举报
回复
非常谢谢您的帮助!
还在加载中灬 2014-12-25
  • 打赏
  • 举报
回复
;WITH CTE1 AS(
	SELECT ROW_NUMBER()OVER(ORDER BY 计划日期)RN
		,*
	FROM TB1
)
,CTE2 AS(
	SELECT ROW_NUMBER()OVER(ORDER BY 日期)RN
		,*
	FROM TB2
)
,CTE AS(
    SELECT T1.计划日期
		,T1.RN
		,T1.计划数量,T2.入库数量
    FROM CTE1 T1
        FULL JOIN CTE2 T2 ON T1.RN=T2.RN
)
SELECT T1.计划日期,T1.计划数量
    ,CASE WHEN T1.入库数量>T1.计划数量 THEN T1.计划数量
        ELSE ISNULL(T1.入库数量,0)
            + CASE WHEN SUM(ISNULL(T2.入库数量,0)-ISNULL(T2.计划数量,0))>0
                    THEN SUM(ISNULL(T2.入库数量,0)-ISNULL(T2.计划数量,0))
                    ELSE 0
            END
    END 入库数量
FROM CTE T1
    LEFT JOIN CTE T2 ON T1.RN>T2.RN
GROUP BY T1.计划日期,T1.计划数量,T1.入库数量
marongc 2014-12-25
  • 打赏
  • 举报
回复
算,就是入库的数量按计划交货的顺序排下来 谢谢啊
还在加载中灬 2014-12-25
  • 打赏
  • 举报
回复
2-4号入的库,是算到2-3的吗? 其实怎么样都可以的,就是要先理清了
marongc 2014-12-25
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
你太多东西没说清楚了,我就大概写个吧,你可以根据自己的需要修改,或者提出不符合的地方
;WITH CTE AS(
	SELECT ISNULL(T1.计划日期,T2.日期)日期,T1.计划数量,T2.入库数量
	FROM TB1 T1
		FULL JOIN TB2 T2 ON T1.计划日期=T2.日期
)
SELECT T1.日期,T1.计划数量
	,CASE WHEN T1.入库数量>T1.计划数量 THEN T1.计划数量
		ELSE ISNULL(T1.入库数量,0)
			+ CASE WHEN SUM(ISNULL(T2.入库数量,0)-ISNULL(T2.计划数量,0))>0
					THEN SUM(ISNULL(T2.入库数量,0)-ISNULL(T2.计划数量,0))
					ELSE 0
			END
	END 入库数量
FROM CTE T1
	LEFT JOIN CTE T2 ON T1.日期>T2.日期
WHERE T1.计划数量 IS NOT NULL
GROUP BY T1.日期,T1.计划数量,T1.入库数量
非常感谢了. 我测试了可以, 有一点我忘了说明,比如那个入库6000的入库时间是2-4号呢 这样就不行了..
还在加载中灬 2014-12-25
  • 打赏
  • 举报
回复
你太多东西没说清楚了,我就大概写个吧,你可以根据自己的需要修改,或者提出不符合的地方
;WITH CTE AS(
	SELECT ISNULL(T1.计划日期,T2.日期)日期,T1.计划数量,T2.入库数量
	FROM TB1 T1
		FULL JOIN TB2 T2 ON T1.计划日期=T2.日期
)
SELECT T1.日期,T1.计划数量
	,CASE WHEN T1.入库数量>T1.计划数量 THEN T1.计划数量
		ELSE ISNULL(T1.入库数量,0)
			+ CASE WHEN SUM(ISNULL(T2.入库数量,0)-ISNULL(T2.计划数量,0))>0
					THEN SUM(ISNULL(T2.入库数量,0)-ISNULL(T2.计划数量,0))
					ELSE 0
			END
	END 入库数量
FROM CTE T1
	LEFT JOIN CTE T2 ON T1.日期>T2.日期
WHERE T1.计划数量 IS NOT NULL
GROUP BY T1.日期,T1.计划数量,T1.入库数量

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧