递归方法-库存填充

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归方法-库存填充相关的知识,希望对你有一定的参考价值。

  • 情形:
之前我在电商遇到这么一个情形:库存记录仅记录出库和入库。
现:要每日库存量的记录。
即:要把没有出库入库数据的天条充完整。
 
  • 假设:
解:工厂生产骨牌,那么我要记录每一天的迄今为止生产了多少个骨牌(按:骨牌颜色和骨牌类型分别统计)
  • 首先:生成具有累计个数(即:有异地生产的天数据)数据
    技术分享
     1 IF EXISTS (SELECT 1 FROM tempdb.dbo.SysObjects WHERE ID = OBJECT_ID(Ntempdb..#生产统计) 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=2
    11     GROUP BY 生产日期,骨牌颜色,骨牌类型
    12 )
    13 ,NumberCount AS(
    14     SELECT C1.*
    15         ,NowCount.Number AS 累计个数
    16     FROM DayCount C1
    17     OUTER APPLY (
    18         SELECT COUNT(1) AS Number 
    19         FROM [TEST].[dbo].[骨牌存储箱] WITH(PAGLOCK)
    20         WHERE C1.骨牌颜色 = 骨牌颜色 AND C1.骨牌类型 = 骨牌类型 AND C1.生产日期 >= 生产日期
    21     )NowCount
    22     WHERE 1+1=2
    23 )
    24 SELECT DENSE_RANK()OVER(ORDER BY 骨牌类型,骨牌颜色) AS LogoID,NC.* 
    25 INTO #生产统计
    26 FROM NumberCount NC
    27 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 Start
    14 ORDER BY LogoID,生产日期
    15 OPTION(MAXRECURSION 0)
    View Code

     

  • 结果:

     技术分享

 

 

以上是关于递归方法-库存填充的主要内容,如果未能解决你的问题,请参考以下文章

BootStrap有用代码片段(持续总结)

BootStrap实用代码片段(持续总结)

JavaSE 方法的使用

如何在片段中填充列表视图?

Android Place自动填充片段:无法设置文字

POWER BI - 递归计算我的 dax 度量的解决方法?