1

選択した 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
);

どんなアドバイスや提案もありがたく受け取った。

4

2 に答える 2