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

Jak utworzyć zapytanie z tabeli hierarchii rodzic-dziecko

Jeśli masz ustaloną lub ograniczoną liczbę poziomów, możesz nie potrzebować DYNAMIC SQL. „Przetwarzanie” ścieżka może być wykonana za pomocą małego kodu XML.

Rozważ następujące kwestie:

Przykład:

Declare @YourTable Table ([Parent] varchar(50),[Child] varchar(50))
Insert Into @YourTable Values 
 (null ,'S-1')
,('S-1','S-11')
,('S-1','S-12')
,('S-1','S-13')
,('S-1','S-14')
,('S-1','S-15')
,('S-11','S-111')
,('S-11','S-112')

;with cteP as (
      Select Child
            ,Parent 
            ,PathID = cast(Child as varchar(500))
      From   @YourTable
      Where  Parent is Null
      Union  All
      Select Child  = r.Child
            ,Parent = r.Parent 
            ,PathID = cast(p.PathID+','+cast(r.Child as varchar(25)) as varchar(500))
      From   @YourTable r
      Join   cteP p on r.Parent  = p.Child)
Select [Group] = Child
      ,B.*
 From  cteP A
 Cross Apply (
                Select Level1 = xDim.value('/x[1]','varchar(max)')
                      ,Level2 = xDim.value('/x[2]','varchar(max)')
                      ,Level3 = xDim.value('/x[3]','varchar(max)')
                      ,Level4 = xDim.value('/x[4]','varchar(max)')
                      ,Level5 = xDim.value('/x[5]','varchar(max)')
                From  (Select Cast('<x>' + replace(PathID,',','</x><x>')+'</x>' as xml) as xDim) as X 
             ) B
  Order By PathID

Zwroty




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przedefiniować kolumny zwracane przez procedurę składowaną w SQL Server

  2. wybierz pogorszenie wydajności instrukcji podczas korzystania z DISTINCT z parametrami

  3. Jak aktualizować i zamawiać za pomocą ms sql

  4. Dowiedz się, czy obiekt jest kluczem obcym za pomocą OBJECTPROPERTY() w SQL Server

  5. Wywołanie funkcji zdefiniowanej w języku SQL w C#