我有一个表 task_dependency 如下所示
task_id depend_task_id
-------------------------
1 NULL
2 NULL
3 1
4 2
4 1
5 4
5 3
我尝试运行查询以获取每个任务的不同任务依赖项列表(包括任务本身)。
预期输出(任务列表顺序无关紧要):
task_id depend_task_list
-----------------------------------------------
1 1;
2 2;
3 1;3
4 1;2;4
5 1;2;3;4;5
到目前为止我所拥有的
DECLARE @t TABLE (task_id INT, depend_task_id INT)
INSERT INTO @t VALUES (1, NULL),(2,NULL),(3,1),(4,2),(4,1),(5,4),(5,3)
;WITH AllDependency (task_id,depend_task_list)
AS(
SELECT
task_id,
depend_task_list=CAST(task_id AS VARCHAR(4000))
FROM @t
WHERE depend_task_id IS NULL
UNION ALL
SELECT
t.task_id,
depend_task_list= CAST(CAST(t.task_id AS VARCHAR(10)) + ';' + depend_task_list AS VARCHAR(4000))
FROM @t t
INNER JOIN AllDependency AS d
ON d.task_id = t.depend_task_id
)
SELECT
task_id,
(SELECT depend_task_list + ';' FROM AllDependency d2 WHERE d.task_id = d2.task_id FOR XML PATH('')) AS depend_task_list
FROM AllDependency d
GROUP BY task_id
ORDER BY task_id
电流输出:
task_id depend_task_list
-----------------------------------------
1 1;
2 2;
3 3;1;
4 4;2;4;1;
5 5;4;2;5;4;1;5;3;1;
问题:如何在不使用光标的情况下获得不同的任务依赖列表?
SQLFiddle 链接http://sqlfiddle.com/#!3/4c034/2
提前感谢您的任何帮助。