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')
而不是转换
调用(对于格式
调用)。