表結構如下:
表數據如下:
一提到無限級,很容易想到遞歸,使用sql 的CET語法如下
with menu(Id,Name,ParentId,Level) as ( select Id,Name,ParentId,0 as Level from dbo.Category where ParentId is Null Union All Select A.Id,A.Name,A.ParentId,B.Level+1 from dbo.Category A inner join menu B on A.ParentId=B.Id ) select * from menu order by Id
查詢結果如下圖:
看到這樣的結果,大失所望,繼續修改查詢語句
with menu(Id,Name,ParentId,Level,px,px2) as ( select Id,Name,ParentId,0 as Level,Id px, cast(Id as nvarchar(4000)) px2 from dbo.Category where ParentId is Null Union All Select A.Id,A.Name,A.ParentId,B.Level+1 ,B.px,B.px2+ltrim(A.Id) from dbo.Category A inner join menu B on A.ParentId=B.Id ) select * from menu order by px,px2
再看一下運行結果: