sql >> Databáze >  >> RDS >> Sqlserver

Získejte záznamy obsahující všechny podřízené záznamy na serveru SQL

Musíte použít rekurzivní společný tabulkový výraz a poté filtrovat výsledky pouze pro základní cestu pro každý záznam (tj. pro ID 1131 získat ABC/RST/UVW a nejen ABC/RST

WITH CTE AS
(   SELECT  ID, 
            Name, 
            ParentID, 
            NextParentID = ParentID, 
            Path = CAST(Name AS VARCHAR(MAX)),
            Recursion = 1
    FROM    T
    UNION ALL
    SELECT  CTE.ID, 
            CTE.Name, 
            CTE.ParentID, 
            T.ParentID, 
            CAST(T.Name + '/' + CTE.Path AS VARCHAR(MAX)),
            Recursion + 1
    FROM    CTE
            INNER JOIN T
                ON CTE.NextParentID = T.ID
), CTE2 AS
(   SELECT  CTE.ID,
            CTE.Name,
            CTE.ParentID,
            CTE.Path,
            RowNumber = ROW_NUMBER() OVER(PARTITION BY CTE.ID ORDER BY Recursion DESC)
    FROM    CTE
)
SELECT  ID, Name, ParentID, Path
FROM    CTE2
WHERE   RowNumber = 1;

Příklad na SQL Fiddle



  1. chyba v syntaxi mysql ve vb.net

  2. MySQL - Zatímco v klauzuli SELECT

  3. Jak zjistit, zda hodnota obsahuje alespoň jednu číselnou číslici v MariaDB

  4. Jak opravím chybu „Hodnota mimo rozsah upravena pro sloupec“?