Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Рекурсивно конкатениране на родителски елементи

Можете да използвате рекурсивен CTE .

declare @T table(ID int, Name char(1), Parent int);

insert into @T values  
(1      ,'A'       ,NULL),
(2      ,'B'       ,NULL),
(3      ,'C'       ,1),
(4      ,'D'       ,1),
(5      ,'E'       ,3),
(6      ,'F'       ,5);

with C as
(
  select ID,
         Name,
         Parent,
         cast('' as varchar(max)) as ParentNames
  from @T
  where parent is null
  union all
  select T.ID,
         T.Name,
         T.Parent,
         C.ParentNames + ' > ' + C.Name
  from @T as T         
    inner join C
      on C.ID = T.Parent
)      
select ID,
       Name,
       stuff(ParentNames, 1, 3, '') as ParentNames
from C;     


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извикване на съхранена процедура с параметър в C#

  2. Преобразуване на ‘time’ в ‘smalldatetime’ в SQL Server (T-SQL примери)

  3. Преобразуване на дата в друга часова зона в SQL Server

  4. Sql сървър 2008 - функции за настройка на производителността за вмъкване на голямо количество данни

  5. Имитирайте group_concat() в комбинация с GROUP BY