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

Jak uzyskać pełną hierarchię z SQL CTE

DECLARE @tmp TABLE(ID INT,ParentID INT,NAME VARCHAR(10),DEPTH INT)

INSERT INTO @tmp VALUES
(1      ,NULL            ,'A'             ,1 ),
(2      ,NULL            ,'B'             ,1 ),
(3      ,NULL            ,'C'             ,1 ),
(4      ,1               ,'D'             ,2 ),
(5      ,4               ,'E'            ,3 ),
(6      ,5               ,'F'            ,4 );

select * from @tmp

;WITH cte AS
(
    SELECT   A.ID
            ,A.ParentID
            ,A.NAME
            ,A.DEPTH
    FROM    @tmp A

    UNION ALL

    SELECT   A.ID
            ,B.ParentID
            ,A.NAME
            ,A.DEPTH 
    FROM    cte A 
    INNER JOIN @tmp B on A.ParentID = B.ID 
    WHERE   B.ParentID IS NOT NULL

)

SELECT * FROM cte


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykryj przerwy powyżej 30 minut w kolumnie sygnatury czasowej

  2. Zapytanie SQL IN daje dziwny wynik

  3. Wartości kolumn tożsamości serwera SQL zaczynają się od 0 zamiast 1

  4. Problem serializacji C# i SQL Server 2008 CLR

  5. Ponieważ nie ma parametru tablicy Sqlserver, jaki jest najlepszy sposób postępowania?