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

Cách nhận cấp phân cấp của truy vấn này

Bạn cần thêm một cột có tên là Level (hoặc bất cứ điều gì bạn muốn gọi nó) - cả đối với SELECT "neo" cũng như phần đệ quy của CTE của bạn - như thế này:

WITH CategoryRec AS 
(
    SELECT Id, Parentid, Name, 1 AS 'Level'
    FROM dbo.Category

    UNION ALL

    SELECT cr.Id, c.Parentid, cr.Name, cr.Level + 1 
    FROM CategoryRec AS cr 
    INNER JOIN dbo.Category AS c ON cr.Parentid = c.Id
    WHERE c.Parentid IS NOT NULL
)
SELECT DISTINCT Id, Parentid, Name, Level
FROM  CategoryRec


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để khắc phục Microsoft SQL Server, Lỗi:262?

  2. CHỌN CASE CAST Lỗi chuyển đổi

  3. Thay đổi loại dữ liệu của cột thành mã định danh duy nhất từ ​​bigint

  4. Gói văn bản trong máy chủ SQL bằng cách sử dụng hàm

  5. Một cách đáng tin cậy để xác minh các thủ tục được lưu trữ T-SQL