• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SqlServer使用公用表表达式(CTE)实现无限级树形构建

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式

    公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它。每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存。可以使用CTE来执行递归操作。

    DECLARE @Level INT=3
    
    ;WITH cte_parent(CategoryID,CategoryName,ParentCategoryID,Level)
    AS
    (
      SELECT category_id,category_name,parent_category_id,1 AS Level
      FROM TianShenLogistic.dbo.ProductCategory WITH(NOLOCK)
     WHERE category_id IN
     (
     SELECT category_id 
     FROM TianShenLogistic.dbo.ProductCategory 
     WHERE parent_category_id=0
     )
      UNION ALL
      SELECT b.category_id,b.category_name,b.parent_category_id,a.Level+1 AS Level
      FROM TianShenLogistic.dbo.ProductCategory b
      INNER JOIN cte_parent a
      ON a.CategoryID = b.parent_category_id
    )
    
    SELECT 
     CategoryID AS value,
     CategoryName as label,
     ParentCategoryID As parentId,
     Level
    FROM cte_parent WHERE Level =@Level;
    public static ListLogisticsCategoryTreeEntity> GetLogisticsCategoryByParent(int? level)
        {
          if (level  1) return null;
    
          var dataResult = CategoryDA.GetLogisticsCategoryByParent(level);
          var firstlevel = dataResult.Where(d => d.level == 1).ToList();
          BuildCategory(dataResult, firstlevel);
          return firstlevel;
        }
    
        private static void BuildCategory(ListLogisticsCategoryTreeEntity> allCategoryList, ListLogisticsCategoryTreeEntity> categoryList)
        {
          foreach (var category in categoryList)
          {
            var subCategoryList = allCategoryList.Where(c => c.parentId == category.value).ToList();
            if (subCategoryList.Count > 0)
            {
              if (category.children == null) category.children = new ListLogisticsCategoryTreeEntity>();
              category.children.AddRange(subCategoryList);
              BuildCategory(allCategoryList, category.children);
            }
          }
        }
    

    您可能感兴趣的文章:
    • 使用SqlServer CTE递归查询处理树、图和层次结构
    • 在sqlserver中如何使用CTE解决复杂查询问题
    • SQLSERVER2008中CTE的Split与CLR的性能比较
    • 使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法
    • SQLSERVER2005 中树形数据的递归查询
    • sqlserver另类非递归的无限级分类(存储过程版)
    上一篇:远程登陆SQL Server 2014数据库的方法
    下一篇:远程连接阿里云SqlServer 2012 数据库服务器的图文教程
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SqlServer使用公用表表达式(CTE)实现无限级树形构建 SqlServer,使用,公用,表,表达式,