選択した Id とそのすべての子の行を返す再帰クエリを作成できました。これは最終的な親にとってはまったく問題なく機能しますが、渡された Id が子の 1 つである場合にも正しく機能する必要があり、子とその子 (存在する場合) のみを表示します。現在、最終的な親の他の子行と、渡された子行が2回表示されます...
前の問題と同様に、CTE または WITH 句をサポートしない SQL Server 以外の TSQL ベースのデータベース エンジンが使用される可能性があるため、サブクエリ形式を使用してこれを行う必要があります。
望ましい結果:
ID 2 を使用すると、2、3、4、6、7 という正しいデータが返されます。ID 6 を使用すると、6、7 のみが返されます。現在、クエリは 6,3,4, 6,7 を返します。
データ:
ProjectId ProjectName ParentId
1 Test Project -1
2 Test Project 2 0
3 Test Project 2 Sub Project 1 2
4 Test Project 2 Sub Project 2 2
5 Test Project 3 -1
6 Test Project 2 Sub Sub Project 1 3
7 Test Project 2 Sub Sub Sub Project 1 6
クエリ:
DECLARE @PROJECTID BIGINT = 2;
SELECT *
FROM
(
SELECT *
FROM ProjectCostingProjects pcp
WHERE pcp.[ProjectId] = @PROJECTID
UNION ALL
SELECT pcp2.*
FROM ProjectCostingProjects pcp2
JOIN ProjectCostingProjects pcp
ON pcp2.ParentID = pcp.ProjectId
);
どんなアドバイスや提案もありがたく受け取った。