代码之家  ›  专栏  ›  技术社区  ›  TheSoftwareJedi jac

如何轻松地将此Sql Server层次结构扁平化为继承的包含列表?

  •  0
  • TheSoftwareJedi jac  · 技术社区  · 17 年前

    我有如下表格(为简单起见):

    Category
    --------------------
    CategoryId (0 for root nodes)
    ParentCategoryId
    
    ProductCategory
    --------------------
    ProductId
    CategoryId
    

    示例表内容:

    CategoryId, ParentCategoryId
    ---------------------
    1, 0
    2, 0
    3, 0
    10, 1
    20, 2
    
    ProductId, CategoryId
    ---------------------
    1, 10
    2, 1
    3, 2
    4, 20
    5, 3
    

    我希望输出沿着层次结构向上移动,并告诉我产品可以属于的每个类别。因此,期望的结果看起来像这样:

    ProductId, CategoryId
    ---------------------
    1, 0
    2, 0
    3, 0
    4, 0
    5, 0
    1, 1
    2, 1
    3, 2
    4, 2
    5, 3
    1, 10
    4, 20
    

    在SQL Server 2005中有一种简单的方法可以做到这一点吗?

    1 回复  |  直到 17 年前
        1
  •  4
  •   sisve    17 年前

    WITH X (ProductId, CategoryId) AS (
        SELECT ProductId, CategoryId FROM #ProductCategory
        UNION ALL
        SELECT X.ProductId, C.ParentCategoryId FROM X
        INNER JOIN #Category C ON X.CategoryId = C.CategoryId
    )
    SELECT ProductId, CategoryId FROM X ORDER BY CategoryId, ProductId
    

    http://msdn.microsoft.com/en-us/library/ms186243.aspx

    推荐文章