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

sql在一个字段中选择父-子递归,sql,sql-server,hierarchical-data,recursive-query,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

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

 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

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

网上有很多有用的文章

有用的链接

以下是您问题的解决方案:

   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(MySQL、Oracle、SQL Server等)。添加了基于“With SqlServer”无关的
SQL Server
标记,但是:如果您想获得正确、稳定的排序顺序,为什么不使用从
idparent
id
的适当外键约束(也就是说,由于树看起来像是展开的),将
orderbyid
更改为
orderbylistjob
,并使用
格式(jobno,'d10')
格式(t.jobno,'d10')
而不是
转换
调用(对于
格式
调用)。