码迷,mamicode.com
首页 > 其他好文 > 详细

具现化骨牌描述递归方法-递归判断

时间:2016-03-31 12:40:58      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

那么从之前随机生产的数据得到较多量[骨牌存储箱]的数据。
我们将利用这部分数据进行演示关于地递归的利用技巧。
以下注释较多。如果不喜欢的话可以不看,并不影响对递归方法的理解。
  • 递归代码:
技术分享
 1 /*
 2     1、首先:
 3         假设情形:现在要利用现有的骨牌进行多米诺骨牌游戏。
 4     2、拍列:
 5         我们现在要知道第一骨牌推到的具体是那些(可多骨牌推到-多数据流同时进行就是码SQL的一大优势,所以小弟劝戒大家能不用游标就不用游标),之后往后面继续排序。排序可行的规则可以参照现实。
 6     3、推牌:
 7         我们根据已经排列好的牌,开始推到。在牌进行的过程我们可以在这个过程添加过程标识。
 8     */
 9 
10     WITH 排列 AS (
11     SELECT DENSE_RANK()OVER(ORDER BY 骨牌类型) AS LogoID -- 给骨牌分组,就是要同时进行推到的骨牌组
12     ,ROW_NUMBER()OVER(PARTITION BY 骨牌类型 ORDER BY 骨牌重量) AS OrderID -- 给骨牌排序,这边就是以骨牌重量从轻的骨牌到重的骨牌排序
13     ,[骨牌存储箱].*
14     FROM [骨牌存储箱] WITH(NOLOCK)
15     WHERE 1+1=2
16     )
17     -- DROP TABLE #排列
18     SELECT * INTO #排列
19     FROM 排列 WITH(NOLOCK)
20     CREATE CLUSTERED INDEX PK_LogoID ON #排列(LogoID);
21 
22     WITH 
23     递归 AS(
24         SELECT *
25         ,1 AS NCount -- 我们可以在递归过程给递归的牌子做标记(任意发挥)
26         FROM #排列 初始
27         WHERE 初始.OrderID = 1 -- 第一块推到的
28 
29         UNION ALL
30 
31         SELECT 递归源.*
32         -- 以下:这个这个递归方法最重要的点,就是递归过程要执行的操作。
33             -- 举个现实的例子:当客户存在消费冲突的时候,也许在1天的时间内为客户冲动期,过了1天后至3天内的都为客服成效调解期。那么我们要确定客服成效期是在那个时间段,我们需要从时间上推导,在之前1天无冲动期,或者突然出现新状况投诉。
34         ,CASE 
35             WHEN 递归.NCount <= 3
36             THEN NCount + 1
37             ELSE 1
38          END
39         FROM #排列 递归源
40         JOIN 递归 ON 递归源.LogoID= 递归.LogoID
41         WHERE 递归源.OrderID = 递归.OrderID + 1 
42     )
43     SELECT 递归.*
44     FROM 递归 
45     ORDER BY LogoID,骨牌重量
46     OPTION(MAXRECURSION 0)-- 0表无限递归次数
View Code
  • 执行结果:
 技术分享
以上仅代表个人见解,不喜着可以呲之以鼻,但是请勿喷!

具现化骨牌描述递归方法-递归判断

标签:

原文地址:http://www.cnblogs.com/C-1989/p/5340511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!