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

Jak uzyskać poziom hierarchii tego zapytania

Musisz dodać kolumnę o nazwie Level (lub jakkolwiek chcesz to nazwać) - zarówno do "kotwicy" SELECT, jak i do rekurencyjnej części twojego CTE - tak:

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. Nieskończona pętla w CTE podczas analizowania tabeli odwołującej się do siebie

  2. Jak dobry jest typ danych geograficznych w sql server 2008?

  3. Jak porównywać daty w SQL Server

  4. Najszybszy sposób na to zapytanie (Jaka jest najlepsza strategia) biorąc pod uwagę zakres dat

  5. Wyzwalacz aktualizujący tylko wstawiony wiersz