使用递归公用表表达式从两个表中查找连续的no.s

psy*_*psy 7 sql sql-server recursive-query common-table-expression sql-server-2008

我有以下表格:

Actual         Optional
------         --------
4                 3
13                6
20                7
26                14
                  19
                  21
                  27
                  28
Run Code Online (Sandbox Code Playgroud)

我要做的是选择:

1)"实际"表中的所有值.

2)如果它们形成具有"实际"表值的连续系列,则从"可选"表中选择值

预期的结果是:

Answer
------
4
13
20
26
3    --because it is consecutive to 4 (i.e 3=4-1) 
14   --14=13+1
19   --19=20-1
21   --21=20+1
27   --27=26+1
28   --this is the important case.28 is not consecutive to 26 but 27 
     --is consecutive to 26 and 26,27,28 together form a series.
Run Code Online (Sandbox Code Playgroud)

我使用递归cte编写了一个查询但是它永远循环并且在递归达到100级后失败.我遇到的问题是27场比赛26场比赛,27场比赛27场比赛27场比赛27场比赛28场比赛27场比赛......(永远)

这是我写的查询:

with recurcte as
        (
        select num as one,num as two from actual
        union all
         select opt.num as one,cte.two as two 
         from recurcte cte join optional opt 
         on opt.num+1=cte.one or opt.num-1=cte.one
        )select * from recurcte
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 6

;WITH Combined
     AS (SELECT 1 AS Actual, N
         FROM   (VALUES(4),
                       (13),
                       (20),
                       (26)) Actual(N)
         UNION ALL
         SELECT 0 AS Actual, N
         FROM   (VALUES(3),
                       (6),
                       (7),
                       (14),
                       (19),
                       (21),
                       (27),
                       (28)) Optional (N)),
     T1
     AS (SELECT *,
                N - DENSE_RANK() OVER (ORDER BY N) AS Grp
         FROM   Combined),
     T2
     AS (SELECT *,
                MAX(Actual) OVER (PARTITION BY Grp) AS HasActual
         FROM   T1)
SELECT DISTINCT N
FROM   T2
WHERE  HasActual = 1  
Run Code Online (Sandbox Code Playgroud)

  • 如果你正确地终止所有陈述(如你所愿),@ sil不一定是真的.两年前的博客:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/09/03/ladies-and-gentlemen-start-your-semi-colons.aspx (3认同)
  • 除非它是一批中的第一个陈述.如图所示,它是. (2认同)