私はテーブルを持っています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
よろしくお願いします。