私は再帰的CTEを初めて使用します。私は、各マネージャーの名前ですべての従業員を返すCTEを開発しようとしています。だから私は2つのテーブルを持っています:people_rv
そしてstaff_rv
People_rvテーブルには、マネージャーと従業員の両方のすべての人が含まれています。Staff_rv
マネージャー情報のみが含まれます。Uniqueidentifierスタッフの値はに格納されStaff_rv
ます。Uniqueidentifierの従業員の値はに格納されpeople_rv
ます。 People_rv
マネージャーと従業員の両方のvarcharの名前と名前の値が含まれます。
しかし、次のCTEを実行すると、エラーが発生します。
WITH
cteStaff (ClientID, FirstName, LastName, SupervisorID, EmpLevel)
AS
(
SELECT p.people_id, p.first_name, p.last_name, s.supervisor_id,1
FROM people_rv p JOIN staff_rv s on s.people_id = p.people_id
WHERE s.supervisor_id = '95E16819-8C3A-4098-9430-08F0E3B764E1'
UNION ALL
SELECT p2.people_id, p2.first_name, p2.last_name, s2.supervisor_id, r.EmpLevel + 1
FROM people_rv p2 JOIN staff_rv s2 on s2.people_id = p2.people_id
INNER JOIN cteStaff r on s2.staff_id = r.ClientID
)
SELECT
FirstName + ' ' + LastName AS FullName,
EmpLevel,
(SELECT first_name + ' ' + last_name FROM people_rv p join staff_rv s on s.people_id = p.people_id
WHERE s.staff_id = cteStaff.SupervisorID) AS Manager
FROM cteStaff
OPTION (MAXRECURSION 0);
私の出力は次のとおりです。
Barbara G 1 Melanie K
Dawn P 1 Melanie K
Garrett M 1 Melanie K
Stephanie P 1 Melanie K
Amanda F 1 Melanie K
Amanda T 1 Melanie K
Stephanie G 1 Melanie K
Carlos H 1 Melanie K
したがって、それは最初のレベル以上の反復ではありません。なぜだめですか?メラニーは一番上の監督者ですが、左端の列の各人も監督者です。したがって、このクエリもレベル2を返す必要があります。