Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để có được cấu trúc phân cấp đầy đủ với 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. Truy vấn hợp nhất nhiều hàng thành các hàng riêng biệt với nhiều cột

  2. Làm cách nào để bạn xác định Bảng SQL nào có cột nhận dạng theo lập trình

  3. Cách thêm cột động vào bảng hiện có

  4. Cú pháp không chính xác gần '(' khi kiểm tra phân mảnh chỉ mục

  5. Cách khắc phục “Câu lệnh EXECUTE không thành công vì mệnh đề WITH RESULT SETS của nó đã chỉ định 1 (các) tập kết quả…” trong SQL Server