在SQL Server中我有一个表:
OneHotEncoder
有一个层次结构概念,每个ShopID Name Description MetaDescription ParentShopID
5 NULL NULL NULL 4
4 NULL D4 NULL 3
3 NULL NULL MD3 2
2 N2 NULL NULL 1
1 N1 D1 MD1 NULL
都有ShopID
。
我希望获得ParentShopID
记录,但是itT中的ShopID=5
值列应该以递归方式替换为父项。
结果应该是这样的:
NULL
性能和成本对我来说非常重要。所以我不倾向于使用ShopID Name Description MetaDescription ParentShopID
5 N2 D4 MD3 4
。
有什么好的解决方案吗?感谢。
答案 0 :(得分:1)
您可以使用基本递归CTE执行此操作:
; with CTE as (
select * from Table1 where ParentShopID is NULL
union all
select
T.ShopId,
isnull(T.Name,C.Name),
isnull(T.Description, C.Description),
isnull(T.MetaDescription, C.MetaDescription),
T.ParentShopId
from CTE C
join Table1 T on T.ParentShopID = C.ShopID
)
结果:
ShopID Name Descr MetaDescr ParentShopID
1 N1 D1 MD1
2 N2 D1 MD1 1
3 N2 D1 MD3 2
4 N2 D4 MD3 3
5 N2 D4 MD3 4
中的示例