sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server rekursiv selvtilslutning

Rekursiv cte til undsætning....

Opret og udfyld eksempeltabel (Venligst gem os dette trin i dine fremtidige spørgsmål):

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 som varchar(100)), t.parent_id FROM @T t INNER JOIN CTE ON t.parent_id =CTE.id)

Forespørgslen:

VÆLG id, navn, stiFRA CTE 

Resultater:

id navn sti1 A A5 B B6 B.1 B,B.18 B.2 B,B.27 B.1.1 B,B.1,B.1.12 A.1 A,A.13 A .2 A,A.24 A.1.1 A,A.1,A.1.19 A.1.1.1 A,A.1,A.1.1,A.1.1.110 A.1.1.2 A,A.1, A.1.1,A.1.1.2

Se online demo på rextester




  1. Sådan forankres/ophæves forespørgsel til Windows og andre faner i SQL Server Management Studio ( SSMS) - SQL Server / TSQL vejledning del 21

  2. Hvordan bruger man enums i Oracle?

  3. Hvordan kalder man en Oracle-funktion fra Hibernate med en returparameter?

  4. VÆLG DISTINCT på én kolonne