Мне удалось создать рекурсивный запрос, который возвращает строки для выбранного идентификатора и всех его дочерних элементов. Это отлично работает для конечного родителя, но мне нужно, чтобы он также работал правильно, когда переданный идентификатор является идентификатором одного из дочерних элементов, показывая только дочерний элемент и его дочерние элементы, если таковые имеются. В настоящее время он по-прежнему возвращает другие дочерние строки конечного родителя, а переданная дочерняя строка отображается дважды...
Как и в предыдущем случае, я должен сделать это, используя формат подзапроса, потому что могут использоваться другие механизмы базы данных на основе TSQL, кроме SQL Server, которые не поддерживают CTE или предложение WITH.
Желаемый результат:
При использовании идентификатора 2 возвращаются правильные данные: 2, 3, 4, 6, 7. При использовании идентификатора 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
);
Любые советы или предложения с благодарностью принимаются.