با سلام.
من یه جدول برای دسته بندی دارم
CREATE TABLE [dbo].[AnbarCategory]( [ID] [int] IDENTITY(1,1) NOT NULL, [Title] [nvarchar](500) NOT NULL, [ParentID] [int] NULL, CONSTRAINT [PK_AnbarCategory] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
و با کد زیر تمامی parent های هر نود را نشون میدم
WITH departmentcte(deptid, department, ParentID, LEVEL, treepath) AS ( SELECT id AS deptid, Title, ParentID, 0 AS LEVEL, CAST(Title AS nVARCHAR(1024)) AS treepath FROM AnbarCategory WHERE ParentID IS NULL UNION ALL SELECT d.id AS deptid, d.Title, d.ParentID, departmentcte.LEVEL + 1 AS LEVEL, CAST(departmentcte.treepath + ' -> ' + CAST(d.Title AS nVARCHAR(1024)) AS nVARCHAR(1024)) AS treepath FROM AnbarCategory d INNER JOIN departmentcte ON departmentcte.deptid = d.ParentID ) SELECT * FROM departmentcte ORDER BY treepath;
ولی این کار وقتی جواب میده که بخوام همه نود ها را با parent هاش نشون بدم.
واگه بخوام فقط یک نود (مثلا deptid 13 )را توی یک ردیف با parent هاش نشون بدم کار نمیده و خروجی زیر را داره
با تشکر از راهنمایی شما
تابع رو خیلی پیچیده کردی نتونستم بخونم
خودم قبلا یک تابع نوشتم با استفاده از حلقه while ببین کارت راه می افته؟
(تو تا فیلد رو برگردوندم)
declare @par int =(select ParentId from Folder Where Id =1050);
declare @t nvarchar(1000)=''
WHILE ( @par > 0)
begin
SET @par = (select ParentId from folder Where Id = @par);
SET @t =Concat((select title from folder Where Id = @par),'/',@t);
End
select @t FullPath,@par par
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)