SQL Server 2008 R2:递归查询

这是以下问题:准备递归查询

我的表具有两列,即可乐和colb,如下所示:

表:测试

create table Test
(
 cola int,
 colb int
);

我输入的记录是:

Cola   Colb
------------
1      2
1      3
1      4
2      5
2      6
2      3
3      2
3      4
3      7
3      10
10     11
11      12
11     13
11     14
12     15
13     16 
14     99
15     88
16     77

注意:现在,我只想显示与我通过的值相关的记录。例如,如果我将值传递为1,则它应该向我显示连接的数字,并像树一样形成连接。

对于上述要求,我从黑暗骑士那里获得了脚本,如下所示,效果很好。

;WITH CTE AS
(
   SELECT COLA,COLB,','+CAST(COLA AS VARCHAR(MAX))+',' AS CHCK FROM test WHERE COLA=1
   UNION ALL
   SELECT C1.COLA,C1.COLB,C.CHCK+CAST(C1.cola AS VARCHAR(MAX))+','
   FROM CTE C INNER JOIN test C1 ON  C.colb = C1.cola
   WHERE CHARINDEX(','+CAST(C.colb AS VARCHAR(MAX))+',',C.CHCK)=0
),
OUTERCTE AS
(   
    SELECT DISTINCT COLA,COLB,ROW_NUMBER() OVER(PARTITION BY Colb ORDER BY Cola) rn FROM CTE --ORDER BY COLA
)
SELECT Cola,Colb FROM OUTERCTE
WHERE rn<=1
ORDER BY CASE WHEN Cola = 1 THEN 1 ELSE 2 END;

这给了我这个:

----------------
Cola        Colb
----------------
1           2   
1           3   
1           4   
2           5   
2           6   
3           7   
3           10  
10          11  
11          12  
11          13  
11          14  
12          15  
13          16  
16          77  
15          88  
14          99  

要求:现在我想显示记录级别。

预期结果

    ------------------------------
    Cola        Colb        Level
    ------------------------------
    1           2           1
    1           3           1
    1           4           1
    2           5           2
    2           6           2
    3           7           2
    3           10          2
    10          11          3
    11          12          4
    11          13          4
    11          14          4
    12          15          5   
    13          16          5
    16          77          6
    15          88          6
    14          99          5
奥萨马·奥拉比
;WITH CTE AS
(
   SELECT COLA,COLB
                 ,','+CAST(COLA AS VARCHAR(MAX))+',' AS CHCK 
                , 1 as lvl FROM #Test WHERE COLA=1
   UNION ALL
   SELECT C1.COLA,C1.COLB  ,C.CHCK+CAST(C1.cola AS VARCHAR(MAX))+',' 
                            , c.lvl+1 
   FROM CTE C INNER JOIN #Test C1 ON  C.colb = C1.cola
    WHERE CHARINDEX(','+CAST(C.colb AS VARCHAR(MAX))+',',C.CHCK)=0 

),
cte2 as (
select * , ROW_NUMBER() over (partition by colb order by lvl)as rn From CTE
)
select cola,colb,lvl from cte2 where rn = 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server 2008 R2:查询性能

来自分类Dev

在SQL Server 2008 R2中查询复杂的XML

来自分类Dev

SQL Server 2008 R2:调整查询

来自分类Dev

从2008 R2创建SQL Server 2008备份

来自分类Dev

SQL Server 2008 R2:从 SQL Server 查询 MS Access

来自分类Dev

极慢的查询,其中包含多个子查询SQL Server 2008 R2

来自分类Dev

如何使用SQL查询在SQL SERVER 2008 R2中获得表定义?

来自分类Dev

SQL Server 2008 R2使用SQL查询引用表的聚集索引

来自分类Dev

使用SQL Server 2008 R2在数据透视表查询中的聚合函数

来自分类Dev

SQL Server 2008 R2子查询分组,求和和计数

来自分类Dev

无法在SQL Server 2008 R2上执行(删除)查询

来自分类Dev

使用CTE查询优化SQL Server 2008 R2进行改进

来自分类Dev

查询SQL Server 2008 R2 XML数据类型的最简单方法?

来自分类Dev

SQL Server 2008 R2:动态数据透视表查询性能

来自分类Dev

SQL Server 2008 R2:通过函数从变量查询xml节点

来自分类Dev

具有位类型的SQL Server 2008 R2动态数据透视查询

来自分类Dev

使用SQL Server 2008 R2进行数据透视表查询

来自分类Dev

SQL Server 2008 r2:无法识别TSQL IIF查询

来自分类Dev

如何在SQL Server 2008 R2中创建查询

来自分类Dev

SQL Server 2008 R2:结合两个查询进行优化

来自分类Dev

SQL查询在SQL Server 2012中工作正常,但在SQL Server 2008 R2中执行失败

来自分类Dev

如何使用递归逻辑仅返回sql表中的Root行(SQL Server 2008 R2)

来自分类Dev

SQL Server 2008中的递归查询

来自分类Dev

SQL Server 2008 R2中的NULL相等

来自分类Dev

SQL Server 2008 R2中奇怪的CAST()行为

来自分类Dev

Dapper读取SqlHierachyId列(SQL Server 2008 R2)

来自分类Dev

节点JS和SQL Server 2008 R2 Express

来自分类Dev

连接行值SQL Server 2008 R2

来自分类Dev

替换SQL Server 2008 R2中的游标

Related 相关文章

  1. 1

    SQL Server 2008 R2:查询性能

  2. 2

    在SQL Server 2008 R2中查询复杂的XML

  3. 3

    SQL Server 2008 R2:调整查询

  4. 4

    从2008 R2创建SQL Server 2008备份

  5. 5

    SQL Server 2008 R2:从 SQL Server 查询 MS Access

  6. 6

    极慢的查询,其中包含多个子查询SQL Server 2008 R2

  7. 7

    如何使用SQL查询在SQL SERVER 2008 R2中获得表定义?

  8. 8

    SQL Server 2008 R2使用SQL查询引用表的聚集索引

  9. 9

    使用SQL Server 2008 R2在数据透视表查询中的聚合函数

  10. 10

    SQL Server 2008 R2子查询分组,求和和计数

  11. 11

    无法在SQL Server 2008 R2上执行(删除)查询

  12. 12

    使用CTE查询优化SQL Server 2008 R2进行改进

  13. 13

    查询SQL Server 2008 R2 XML数据类型的最简单方法?

  14. 14

    SQL Server 2008 R2:动态数据透视表查询性能

  15. 15

    SQL Server 2008 R2:通过函数从变量查询xml节点

  16. 16

    具有位类型的SQL Server 2008 R2动态数据透视查询

  17. 17

    使用SQL Server 2008 R2进行数据透视表查询

  18. 18

    SQL Server 2008 r2:无法识别TSQL IIF查询

  19. 19

    如何在SQL Server 2008 R2中创建查询

  20. 20

    SQL Server 2008 R2:结合两个查询进行优化

  21. 21

    SQL查询在SQL Server 2012中工作正常,但在SQL Server 2008 R2中执行失败

  22. 22

    如何使用递归逻辑仅返回sql表中的Root行(SQL Server 2008 R2)

  23. 23

    SQL Server 2008中的递归查询

  24. 24

    SQL Server 2008 R2中的NULL相等

  25. 25

    SQL Server 2008 R2中奇怪的CAST()行为

  26. 26

    Dapper读取SqlHierachyId列(SQL Server 2008 R2)

  27. 27

    节点JS和SQL Server 2008 R2 Express

  28. 28

    连接行值SQL Server 2008 R2

  29. 29

    替换SQL Server 2008 R2中的游标

热门标签

归档