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

本文给大家分享的是sqlserver中使用公用表表达式(CTE)实现无限级树形构建的详细代码,非常的简单实用,有需要的小伙伴可以参考下

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

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 List<LogisticsCategoryTreeEntity> 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(List<LogisticsCategoryTreeEntity> allCategoryList, List<LogisticsCategoryTreeEntity> 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 List<LogisticsCategoryTreeEntity>();

category.children.AddRange(subCategoryList);

BuildCategory(allCategoryList, category.children);

}

}

}

原文链接:http://leelei.blog.51cto.com/856755/1957792

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/25091/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年9月23日 下午12:20
下一篇 2022年9月23日 下午12:20
软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!