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

Изберете родител и дете от същата таблица

Трябва да използвате рекурсивен CTE (общ табличен израз) за това:

-- define the recursive CTE and give it a name
;WITH Hierarchy AS
(
    -- "anchor" - top-level rows to select, here those with ManagerId = 0
    SELECT EmpId, EmpName, NULL AS 'MgrId', CAST(NULL AS NVARCHAR(50)) AS 'MgrName', 1 AS 'Level'
    FROM dbo.Emp
    WHERE ManagerId = 0

    UNION ALL

    -- recursive part - join an employee to its manager via ManagerId -> mgr.EmpId
    SELECT e.EmpId, e.EmpName, mgr.EmpId, mgr.EmpName, mgr.Level + 1 AS 'Level'
    FROM dbo.Emp e
    INNER JOIN Hierarchy mgr ON e.ManagerId = mgr.EmpId
)
SELECT * FROM Hierarchy


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Agent не се стартира автоматично при рестартиране на сървъра

  2. SQL Server:Връщане назад без НАЧАЛО НА ТРАНЗАКЦИЯ

  3. Как трябва да вмъкна множество записи?

  4. Как да чета xml в t-sql?

  5. Странирай със Sequelize.js в SQL 2008 (който не поддържа FETCH)