Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wybierz rodzica i dziecko z tego samego stołu

W tym celu należy użyć rekurencyjnego CTE (Common Table Expression):

-- 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. Zaktualizuj pole varbinary (MAX) w SQLServer 2012 Utracono ostatnie 4 bity

  2. Sortuj kolumny dla dynamicznego obrotu

  3. Powolne działanie zapytania tylko na moim komputerze

  4. Dodawanie wartości procentowych do wielu zliczeń w jednym zapytaniu SQL SELECT

  5. jak mogę uzyskać ułamek dziesiętny w sql