sql >> Database >  >> RDS >> Sqlserver

Een SQL Server 2005 CTE maken om ouder-kindrecords te retourneren voor kinderen met meerdere ouders

Dit lijkt goed te werken voor mij, nadat ik de syntaxisfout in je CTE heb gecorrigeerd:

create table #ParentChildTable 
(nodeID int not null
,parentNodeID int not null
)

insert #ParentChildTable 
select 900,56
union all select 900,123
union all select 123,439
union all select 56,439
union all select 439,0

;WITH Heirarchy
AS
(
    SELECT 
        T1.NodeID,
          T1.ParentNodeID
    FROM
        #ParentChildTable T1
    WHERE
        T1.NodeID = 439

    UNION ALL
    SELECT 
        T1.NodeID,
        T1.ParentNodeID
    FROM
        #ParentChildTable T1
        INNER JOIN Heirarchy TH ON TH.NodeID = T1.ParentNodeID
)
select *
from Heirarchy

Retourneert het resultaat:

NodeID      ParentNodeID
----------- ------------
439         0
123         439
56          439
900         56
900         123


  1. standaard voor kolom xxxx kan niet automatisch worden gecast om boolean te typen in Postgres DB

  2. Maak een nieuwe tabel door twee tabellen samen te voegen met union

  3. formule voor berekende kolom op basis van de kolom van een andere tabel

  4. Dynamisch kolommen maken sql