Пожалуйста, помогите мне, как привлечь всех родителей к участию. Если я передам submissionId в таблицу (выделен черным), я должен получить всех родителей для этого представления (выделено красным)

enter image description here

Пример данных:

5EAB0B3D-5A17-43A9-9BC2-21B950F4B4E7    24A6DB20-20D1-4063-9DC6-CC1990B26FD7
4DEA6377-DF7C-415E-8E06-7DDEB34B53F6    45D6A438-61C7-488C-BC83-8AAB491B037D
9B83B4D0-E122-462F-842D-9A0A4774A6D5    24A6DB20-20D1-4063-9DC6-CC1990B26FD7
0BED1600-3120-4C3A-BA86-A3BFAC5765FA    9B83B4D0-E122-462F-842D-9A0A4774A6D5
DB5DF89E-0E6B-46FE-BE9A-CA6F47F4B544    24A6DB20-20D1-4063-9DC6-CC1990B26FD7

Запрос:

WITH n([submissionid], [parentid]) AS 
(
    SELECT 
        [submissionid], 
        [parentid] 
    FROM   
        [submissionrenewal] 
    WHERE  
        [submissionid] = '0BED1600-3120-4C3A-BA86-A3BFAC5765FA' 

    UNION ALL 

    SELECT 
        m.[submissionid], 
        m.[parentid] 
    FROM   
        [submissionrenewal] AS m, 
        n 
    WHERE  
        n.[submissionid] = m.[parentid]
)
SELECT DISTINCT * 
FROM n 

Ввод

0BED1600-3120-4C3A-BA86-A3BFAC5765FA 

Выход

9B83B4D0-E122-462F-842D-9A0A4774A6D5 
24A6DB20-20D1-4063-9DC6-CC1990B26FD7
0
sannadi sarath 16 Июл 2017 в 05:37
1
Разместите образцы данных в виде текста. Никогда не публикуйте образцы данных в виде изображения, и никто не может их использовать. Протестируйте код.
 – 
Pரதீப்
16 Июл 2017 в 05:38
Опубликовано, данные дайте мне знать, есть ли способ прикрепить их
 – 
sannadi sarath
16 Июл 2017 в 05:44
Достаточно также добавить ожидаемый результат для выборки данных .. Слышали о Recursive CTE в Sql Server?
 – 
Pரதீப்
16 Июл 2017 в 05:46
Я пробовал это, но не получил никакого результата
 – 
sannadi sarath
16 Июл 2017 в 05:51
Опубликуйте запрос и ожидаемый результат в вопросе
 – 
Pரதீப்
16 Июл 2017 в 05:53

1 ответ

Лучший ответ

Вам просто нужно изменить условие соединения. Parentid из запроса привязки следует объединить с рекурсивной частью submissionid. Вам нужно просто заменить псевдоним в пункте where m.[submissionid] = n.[parentid]

WITH n([submissionid], [parentid]) -- giving a meaningful CTE name will improve the code readability  
     AS (SELECT [submissionid], 
                [parentid] 
         FROM   [submissionrenewal] 
         WHERE  [submissionid] = '0BED1600-3120-4C3A-BA86-A3BFAC5765FA' 
         UNION ALL 
         SELECT m.[submissionid], 
                m.[parentid] 
         FROM   [submissionrenewal] AS m 
                INNER JOIN n 
                        ON m.[submissionid] = n.[parentid]) --here
SELECT * 
FROM   n 

Примечание . Всегда используйте синтаксис INNER JOIN вместо старого стиля соединения, разделенного запятыми.

2
Pரதீப் 16 Июл 2017 в 06:17