我有一张桌子,里面有层次结构。
让我们从Id = 5
开始;这是孩子。 (给出启动参数 - 来自用户)
算法:
first
id = 5
值
id = 5
的值,请转到其父级并将其id
parentId = 0
)P.S。这里的结果应该是7。
如果7值为空,那么:9
如果9也是空的那么结束:1
我正在尝试用CTE做这个但没有成功..
P.S。我想要 CTE的解决方案。 :)
我尝试了什么(甚至不看它 - 它不起作用):
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
答案 0 :(得分:2)
你需要加入你的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
子句中的某个位置加入该表。在这种情况下,你没有,这就是它抛出错误的原因。