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

Как да получите пълната йерархия с 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. Процесори от серия AMD EPYC 7002 и SQL сървър

  2. Защо SQL Server добавя цяло число от 4 байта към неуникални клъстерирани индекси

  3. Моята заявка Select SUM връща нула. Трябва да върне 0

  4. Експортирайте xml данни с помощта на BCP команда в SQL Server

  5. Защо да използвате ниво на изолация ЧЕТЕНЕ НЕКОНТРОЛИРАНО?