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

Thứ tự phân cấp từ kết quả truy vấn đệ quy trong SQL 2005

Một cách bạn có thể làm là thêm cột phân cấp có tất cả các ID trước đó trong danh sách:

with tasks (TaskId, ParentTaskId, [Name], TaskIdList) as
(
    select parentTasks.TaskId,
           parentTasks.ParentTaskId,
           parentTasks.[Name],
           parentTasks.TaskId
    from   Task parentTasks
    where  ParentTaskId is null

    union all

    select childTasks.TaskId,
           childTasks.ParentTaskId,
           childTasks.[Name],
           tasks.TaskIdList + '.' + childTasks.TaskId
    from   Task childTasks
    join   tasks
    on     childTasks.ParentTaskId = tasks.TaskId
)

select TaskId, ParentTaskId, [Name] from tasks
   order by TaskIdList

Lưu ý rằng điều này giả định rằng TaskId là một ID dựa trên chuỗi. Nếu không, bạn nên truyền nó vào một varchar trước khi nối nó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chạy truy vấn SQL Server CE 4 với Visual Studio 2012 và SQL Server Management Studio 2012

  2. Sử dụng các biến cho asc và desc theo thứ tự

  3. Phương pháp tiếp cận tốt nhất cho tính năng tự động tăng trưởng là gì

  4. Thủ tục được lưu trữ T-SQL chấp nhận nhiều giá trị Id

  5. Làm cách nào để thêm cột số thứ tự vào dữ liệu kết quả?