Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Rekurencyjne samodołączanie SQL Server

Rekursywne cte na ratunek....

Utwórz i wypełnij przykładową tabelę (Proszę zapisz nam ten krok w przyszłych pytaniach):

DECLARE @T as table
(
    id int,
    name varchar(100),
    parent_id int
)

INSERT INTO @T VALUES
(1, 'A', NULL),
(2, 'A.1', 1),
(3, 'A.2', 1),
(4, 'A.1.1', 2),
(5, 'B', NULL),
(6, 'B.1', 5),
(7, 'B.1.1', 6),
(8, 'B.2', 5),
(9, 'A.1.1.1', 4),
(10, 'A.1.1.2', 4)

Cte:

;WITH CTE AS
(
    SELECT id, name, name as path, parent_id
    FROM @T 
    WHERE parent_id IS NULL
    UNION ALL
    SELECT t.id, t.name, cast(cte.path +','+ t.name as varchar(100)), t.parent_id
    FROM @T t
    INNER JOIN CTE ON t.parent_id = CTE.id
)

Zapytanie:

SELECT id, name, path
FROM CTE

Wyniki:

id      name        path
1       A           A
5       B           B
6       B.1         B,B.1
8       B.2         B,B.2
7       B.1.1       B,B.1,B.1.1
2       A.1         A,A.1
3       A.2         A,A.2
4       A.1.1       A,A.1,A.1.1
9       A.1.1.1     A,A.1,A.1.1,A.1.1.1
10      A.1.1.2     A,A.1,A.1.1,A.1.1.2

Zobacz demo online na rextesterze




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak naprawić „Wyrażenie ALTER TABLE SWITCH nie powiodło się”

  2. Wstaw zbiorczy z kwalifikatorem tekstu w SQL Server

  3. SQL Server 2014:natywne szyfrowanie kopii zapasowych

  4. Usuń wszystkie spacje z ciągu w SQL Server

  5. OPENJSON „Nieprawidłowa składnia w pobliżu słowa kluczowego „z”.”. w SQL Server (ROZWIĄZANE)