Как-то так может сработать
Тестовые данные
DECLARE @tbl TABLE (RequestID INT,PrimaryRequestID INT,Prefix VARCHAR(100))
INSERT INTO @tbl
VALUES
(1,NULL,'MyPrefix'),
(2,1,NULL)
Запрос
;WITH CTE(RequestID,PrimaryRequestID,Prefix)
AS
(
SELECT
tbl.RequestID,
tbl.PrimaryRequestID,
tbl.Prefix
FROM
@tbl AS tbl
WHERE
tbl.PrimaryRequestID IS NULL
UNION ALL
SELECT
tbl.RequestID,
tbl.PrimaryRequestID,
CTE.Prefix
FROM
@tbl AS tbl
JOIN CTE
ON tbl.PrimaryRequestID=CTE.RequestID
)
SELECT
*
FROM
CTE
Я использую рекурсивную функцию cte, подробнее об этом здесь
Если у вас есть, например, еще одна строка в вашей таблице.Итак, ваша таблица выглядит следующим образом:
1 NULL MyPrefix
2 1 NULL
3 2 NULL
Тогда результат будет по-прежнему таким:
1 NULL MyPrefix
2 1 MyPrefix
3 2 MyPrefix
Поскольку я использую родительские дочерние отношения в таблице.
Если вы хотите иметь пример. Здесь , здесь , здесь и здесь - некоторые примеры использования stackoverflow