子记录如何覆盖父记录列?

时间:2015-11-22 05:30:44

标签: sql-server

在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

有什么好的解决方案吗?感谢。

1 个答案:

答案 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

SQL Fiddle

中的示例