Не похоже, что вам действительно нужен рекурсивный CTE для этого. Кажется, что 2 объединения могут помочь (в зависимости от того, какие таблицы у вас есть).
SELECT A.ProjectNr
, B.ProjectNr
, C.ProjectNr
FROM PROJECTS A
INNER JOIN PROJECTS B ON A.ProjectNr = B.ParentProject
INNER JOIN PROJECTS C ON B.ProjectNr = C.ParentProject
WHERE A.ProjectNr = 'CL3264'
Это также должно работать, даже если вам нужно присоединиться к одной таблице.
Вы можете использоватьприведенный ниже скрипт для проверки результатов:
CREATE TABLE #PROJECTS (ProjectNr varchar(30), ParentProject varchar(30));
INSERT INTO #PROJECTS (ProjectNr, ParentProject) values ('CL3264', NULL)
, ('CL3264-B', 'Cl3264')
, ('CL3264-C1', 'Cl3264')
, ('CL3264-C2', 'Cl3264')
, ('CL3264-C3', 'Cl3264')
, ('CL3264-F1', 'Cl3264')
, ('CL3264-G1', 'Cl3264')
, ('CL3264-G2', 'Cl3264')
, ('CL3264-P', 'Cl3264')
, ('PR1700000468', 'CL3264-B')
, ('PR1700000469', 'CL3264-C1')
, ('PR1700000474', 'CL3264-C2')
, ('PR1700000475', 'CL3264-C3')
, ('PR1700000476', 'CL3264-F1')
, ('PR1700000477', 'CL3264-G1')
, ('PR1700000478', 'CL3264-G2')
, ('PR1700000479', 'CL3264-P')
, ('PR1700000999', 'CL3264-X')
, ('PR1700009999', 'CL3264-Y')
, ('CL3264-Y', 'CL2360') -- purposely added to see that the filtering works
, ('CL3264-X', 'CL2360') -- purposely added to see that the filtering works
, ('CL2360', NULL) -- purposely added to see that the filtering works
SELECT A.ProjectNr
, B.ProjectNr AS Project_Level2
, C.ProjectNr AS Project_Level3
FROM #PROJECTS A
INNER JOIN #PROJECTS B ON A.ProjectNr = B.ParentProject
INNER JOIN #PROJECTS C ON B.ProjectNr = C.ParentProject
WHERE A.ProjectNr = 'CL3264'
Ниже приведен результат выполнения скрипта / запроса: