博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归方法-库存填充
阅读量:4317 次
发布时间:2019-06-06

本文共 1433 字,大约阅读时间需要 4 分钟。

  • 情形:
之前我在电商遇到这么一个情形:库存记录仅记录出库和入库。
现:要每日库存量的记录。
即:要把没有出库入库数据的天条充完整。
 
  • 假设:
解:工厂生产骨牌,那么我要记录每一天的迄今为止生产了多少个骨牌(按:骨牌颜色和骨牌类型分别统计)
  • 首先:生成具有累计个数(即:有异地生产的天数据)数据
    1 IF EXISTS (SELECT 1 FROM tempdb.dbo.SysObjects WHERE ID = OBJECT_ID(N'tempdb..#生产统计') AND TYPE = 'U') 2 DROP TABLE #生产统计; 3  4 WITH DayCount AS( 5     SELECT 生产日期 6         ,骨牌颜色 7         ,骨牌类型 8         ,COUNT(1) AS 生产个数 9     FROM [TEST].[dbo].[骨牌存储箱] WITH(PAGLOCK)10     WHERE 1+1=211     GROUP BY 生产日期,骨牌颜色,骨牌类型12 )13 ,NumberCount AS(14     SELECT C1.*15         ,NowCount.Number AS 累计个数16     FROM DayCount C117     OUTER APPLY (18         SELECT COUNT(1) AS Number 19         FROM [TEST].[dbo].[骨牌存储箱] WITH(PAGLOCK)20         WHERE C1.骨牌颜色 = 骨牌颜色 AND C1.骨牌类型 = 骨牌类型 AND C1.生产日期 >= 生产日期21     )NowCount22     WHERE 1+1=223 )24 SELECT DENSE_RANK()OVER(ORDER BY 骨牌类型,骨牌颜色) AS LogoID,NC.* 25 INTO #生产统计26 FROM NumberCount NC27 CREATE CLUSTERED INDEX PK_LogoID ON #生产统计(LogoID);
    View Code

     

  • 然后:执行递归,把空余的天数按前面最近天的累计数填充
    1 WITH Start AS( 2     SELECT LogoID,生产日期,骨牌颜色,骨牌类型,生产个数,累计个数 3     FROM #生产统计 4  5     UNION ALL 6  7     SELECT LogoID,DATEADD(DAY,1,生产日期),骨牌颜色,骨牌类型,生产个数,累计个数 8     FROM Start 9     WHERE 1+1=2 AND 生产日期 <= '2015-12-31'10     AND NOT EXISTS(SELECT 1 FROM #生产统计 WHERE LogoID = Start.LogoID AND 生产日期 = DATEADD(DAY,1,Start.生产日期))11 )12 SELECT *13 FROM Start14 ORDER BY LogoID,生产日期15 OPTION(MAXRECURSION 0)
    View Code

     

  • 结果:

     

 

 

转载于:https://www.cnblogs.com/C-1989/p/5341485.html

你可能感兴趣的文章
C# - XML
查看>>
android权限大全
查看>>
BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
查看>>
[原]unity5 AssetBundle 加载
查看>>
[Day15]常用API(Object类、String类)
查看>>
[置顶] 各种流行的编程风格
查看>>
codeforces1029 E.Tree with Small Distances
查看>>
JavaScript——JS上下文中的this值笔记
查看>>
Bootstrap简单使用
查看>>
导航控制器的出栈
查看>>
玩转CSS3,嗨翻WEB前端,CSS3伪类元素详解/深入浅出[原创][5+3时代]
查看>>
iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置
查看>>
Delphi消息小记
查看>>
HNOI2016
查看>>
BZOJ2648: SJY摆棋子&&2716: [Violet 3]天使玩偶
查看>>
JVM介绍
查看>>
结构体,联合体,内存分配
查看>>
JVM垃圾收集器介绍
查看>>
[No0000136]6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
查看>>
【转】MapReduce源码分析总结
查看>>