Моя цель - перезаписать таблицу tbl и, рекурсив через эту таблицу, выбрать аббревиатуру страны (если она существует) из другой таблицы tbl2 и добавить эти результаты вместе, которые включены в конечный результат.Помощь при рекурсивном обращении CTE к второй таблице
В примере я буду использовать придет from this post
tbl2 имеет «tbl_id» внешний ключ к ТПС и выглядит следующим образом
INSERT INTO @tbl2(Id, Abbreviation, tbl_id)
VALUES
(100, 'EU', 1)
,(101, 'AS', 2)
,(102, 'DE', 3)
,(103, 'CN', 5)
* Примечание: не все страны имеют аббревиатуры.
Фокус в том, что я хочу, чтобы все страны Азии, по крайней мере, отображали аббревиатуру Азии, которая является «AS», даже если страна не имеет аббревиатуры (например, в Индии). Если страна имеет аббревиатуру результат должен выглядеть следующим образом: Китай: CN, AS
Я получил это частично работает с использованием подзапроса, но Индия всегда возвращает NULL для аббревиатуры. Он действует, как если бы не полный рекурсивный путь назад к аббревиатуре, тогда он возвращает null. Может быть, решение состоит в том, чтобы использовать левое внешнее соединение в таблице аббревиатуры? Я пробовал в течение нескольких часов различные варианты, и подзапрос как можно ближе.
WITH abcd
AS (
-- anchor
SELECT id, [Name], ParentID,
CAST(([Name]) AS VARCHAR(1000)) AS "Path"
FROM @tbl
WHERE ParentId IS NULL
UNION ALL
--recursive member
SELECT t.id, t.[Name], t.ParentID,
CAST((a.path + '/' + t.Name + ':' +
(
select t2.abbreviation + ','
from @tbl2
where t.id = t2.id
)) AS VARCHAR(1000)) AS "Path"
FROM @tbl AS t
JOIN abcd AS a
ON t.ParentId = a.id
)
SELECT * FROM abcd
Кстати, я использую SQL Server 2005, если это имеет значение
Какой вывод вы ищете, колонки и формат выборки, пожалуйста, – RichardTheKiwi
вывод, который вы имеете ниже, просто отлично. –