重複の可能性:
CTE を使用した実際の再帰?
次の列を持つ Employee テーブルなど、それ自体を参照する階層テーブルがあるとします。
Table Employee
Column Id INT NOT NULL
Column ParentId INT NOT NULL (references Id)
Column Name NVARCHAR(60) NOT NULL
次のクエリは、特定の EmployeeId をルートとするすべてのレコードを取得します。
DECLARE @EmployeeId INT = <%insert EmployeeId here%>;
WITH CDE AS
(
SELECT
*,
0 AS Level
FROM
collaboration.Employee AS E
WHERE
Id = @EmployeeId
UNION ALL
SELECT
E.*,
CDE.Level + 1 AS Level
FROM
collaboration.Employee AS E
INNER JOIN
CDE ON E.ParentId = CDE.Id AND E.Id <> 0
)
SELECT DISTINCT
CDE.*
FROM
CDE
ORDER BY
CDE.Level
私が望むのは、「ブランチ」でソートしてから「レベル」でソートできるようにすることです。したがって、次の表が与えられます。
1 0 John Smith
2 1 John Doe
3 1 Jane Williams
4 2 Ian Bond
5 2 James Fleming
結果を次のようにしたいと思います。
1 0 John Smith
2 1 John Doe
4 2 Ian Bond
5 2 James Fleming
3 1 Jane Williams
並べ替えを容易にするために文字列を構築する必要のないソリューションが必要です。解決できない場合は、その理由を知りたいです。