sql在一个字段中选择父子递归

标签 sql sql-server hierarchical-data recursive-query

我不知道如何选择查询递归..

 id     idparent    jobNO
--------------------------------
  1         0         1
  2         1         2
  3         1         3
  4         0         4
  5         4         5
  6         4         6

这样的结果怎么用SqlServer
 id     idparent    jobNO   ListJob
----------------------------------------
  1         0         1        1
  2         1         2        1/2
  3         1         3        1/3
  4         0         4        4
  5         4         5        4/5
  6         5         6        4/5/6

最佳答案

您需要使用递归公用表表达式。

网上有很多有用的文章。

有用的链接

Simple Talk: SQL Server CTE Basics

blog.sqlauthority: Recursive CTE

这是您问题的解决方案:

   CREATE TABLE #TEST
    (
        id int not null,
        idparent int not null,
        jobno int not null
    );

    INSERT INTO #Test VALUES 
    (1,0,1),
    (2,1,2),
    (3,1,3),
    (4,0,4),
    (5,4,5),
    (6,5,6);

    WITH CTE AS (
-- This is end of the recursion: Select items with no parent
        SELECT id, idparent, jobno, CONVERT(VARCHAR(MAX),jobno) AS ListJob
        FROM #Test
        WHERE idParent = 0
    UNION ALL
-- This is the recursive part: It joins to CTE
        SELECT t.id, t.idparent, t.jobno,  c.ListJob + '/' + CONVERT(VARCHAR(MAX),t.jobno) AS ListJob
        FROM #Test t
        INNER JOIN CTE c ON t.idParent = c.id
    )
    SELECT * FROM CTE
    ORDER BY id;

关于sql在一个字段中选择父子递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37679357/

相关文章:

SQL 在 SSRS 中运行缓慢,但在 SSMS 中运行速度快

sql - 如何改进这个条件 UPDATE 查询?

mysql - 如何导出 MS Sql Server 数据库转储并将其导入 Mysql 数据库?

sql - 确定自引用表中组的排名

Oracle PL/SQL 就在根节点查询之前

javascript - sql插入没有错误,但表没有数据

sql - 如何使用 SQL 转置表?

sql - SSIS 中的源代码控制和 dtsx 文件的并发工作

SQLServer 2000 兼容性

c# - 将项目列表转换为树的通用方法