鑑於分層表引用本身,如具有下列列的Employee表:
Table Employee
Column Id INT NOT NULL
Column ParentId INT NOT NULL (references Id)
Column Name NVARCHAR(60) NOT NULL
以下查詢會給我所有記錄r ooted在一個給定的僱員:
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
我想,不涉及建立字符串,方便整理的解決方案。如果解決方案不可行,我想知道爲什麼。
@MikaelEriksson,你是對的,它有點相同的問題,但我有一個額外的問題,這就是當我在本例中使用'INT'作爲Id列時,在真實情況下'UNIQUEIDENTIFIER'正在被使用,另一個例子會很快處理非常大的字符串。我想要一個解決方案,不需要建立字符串值來進行排序。 –
我想要一輛法拉利。如果您有一個特定的解決方案,最好告訴我們一開始是什麼,或至少編輯您的問題,以表明願意花時間解決您的問題的任何人 – podiluska