SqlServer使用公用表表達式(CTE)實現(xiàn)無限級樹形構(gòu)建
更新時間:2017年08月28日 08:39:17 作者:BruceAndLee
本文給大家分享的是sqlserver中使用公用表表達式(CTE)實現(xiàn)無限級樹形構(gòu)建的詳細代碼,非常的簡單實用,有需要的小伙伴可以參考下
SQL Server 2005開始,我們可以直接通過CTE來支持遞歸查詢,CTE即公用表表達式
公用表表達式(CTE),是一個在查詢中定義的臨時命名結(jié)果集將在from子句中使用它。每個CTE僅被定義一次(但在其作用域內(nèi)可以被引用任意次),并且在該查詢生存期間將一直生存。可以使用CTE來執(zhí)行遞歸操作。
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);
}
}
}
您可能感興趣的文章:
- Mysql8公用表表達式CTE詳解
- MySQL8.0之CTE(公用表表達式)的使用
- SQL?Server使用T-SQL進階之公用表表達式(CTE)
- mysql8 公用表表達式CTE的使用方法實例分析
- sql server使用公用表表達式CTE通過遞歸方式編寫通用函數(shù)自動生成連續(xù)數(shù)字和日期
- SQL Server 公用表表達式(CTE)實現(xiàn)遞歸的方法
- 關(guān)于SQL中CTE(公用表表達式)(Common Table Expression)的總結(jié)
- SQL2005 學(xué)習(xí)筆記 公用表表達式(CTE)
- SqlServer公用表表達式(CTE)的具體使用
相關(guān)文章
揭秘SQL Server 2014有哪些新特性(1)-內(nèi)存數(shù)據(jù)庫
微軟SQL Server 2014提供了眾多激動人心的新功能,但其中最讓人期待的特性之一就是代號為” Hekaton”的內(nèi)存數(shù)據(jù)庫了,內(nèi)存數(shù)據(jù)庫特性并不是SQL Server的替代,而是適應(yīng)時代的補充,現(xiàn)在SQL Server具備了將數(shù)據(jù)表完整存入內(nèi)存的功能。那么今天我們就先來看看內(nèi)存數(shù)據(jù)庫2014-08-08
sql?server導(dǎo)入、導(dǎo)出數(shù)據(jù)庫詳細圖文教程
這篇文章主要給大家介紹了sql?server導(dǎo)入、導(dǎo)出數(shù)據(jù)庫的相關(guān)資料,數(shù)據(jù)的導(dǎo)入是指從其他數(shù)據(jù)源中把數(shù)據(jù)復(fù)制到SQL Server數(shù)據(jù)庫中,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-10-10
大數(shù)據(jù)量分頁存儲過程效率測試附測試代碼與結(jié)果
在項目中,我們經(jīng)常遇到或用到分頁,那么在大數(shù)據(jù)量(百萬級以上)下,哪種分頁算法效率最優(yōu)呢?我們不妨用事實說話。2010-07-07
sql 函數(shù)大全 比較常用的一些函數(shù)整理
學(xué)習(xí)sqlserver的朋友,可以參考下,掌握這些函數(shù)可以方便的對字段的字符進行處理。2010-04-04
通過SQLSERVER重啟SQLSERVER服務(wù)和計算機的方法
為了實現(xiàn)遠程重新啟動,從而想到了用SQL語句命令實現(xiàn)這個功能,但是具體的命令格式給忘記了,找了點資料,把方法寫在下面2010-09-09

