Иерархия SQL Server CTE? - PullRequest
       1

Иерархия SQL Server CTE?

2 голосов
/ 06 января 2012

У меня есть таблица с иерархией.

Давайте начнем с Id = 5; это ребенок ( данный параметр запуска - от пользователя)

Алгоритм:

  • дайте мне значение first, с которым вы столкнулись для id = 5
  • если вы не нашли значение для id = 5, перейдите к его родителю и дайте мне его id
  • если у этого родителя также нет значения - перейти к его родителю ... и т. Д. (Пока у родителя нет родителя - parentId = 0)

p.s. результат здесь должен быть 7.

если значение 7 было пустым, то: 9

конец, если 9 также было пустым, так: 1

Я пытаюсь сделать это с CTE, но безуспешно ..

p.s. Я хочу решение с помощью CTE. :)

enter image description here

То, что я пробовал (даже не смотрите на это - это не работает):

WITH cte AS (
SELECT  
       id,VALUE,parentid

  FROM [test].[dbo].[tmp]   WHERE id=5
  UNION ALL

  SELECT  
      id,VALUE,parentid
  FROM  [tmp]   WHERE parentId=cte.parentId ) //ERROR : The multi-part identifier "cte.parentId" could not be bound.
  SELECT * FROM cte

1 Ответ

2 голосов
/ 06 января 2012

Вам необходимо присоединиться к вашему cte:

with cte as (
select
    id,
    value,
    parentid
from
    [tmp]
where 
    id=5
union all
select
    tmp.id,
    coalesce(cte.value, tmp.value) as value,
    tmp.parentid
from  
    [tmp]
    inner join cte on
        tmp.id = cte.parentId
)
select
    max(value) as value
from
    cte

Если вы собираетесь ссылаться на таблицу, вам нужно убедиться, что вы присоединились к ней где-то в вашем предложении from. В этом случае вы этого не сделали, поэтому выдает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...