Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将顶级父级添加到现有SQL查询_Sql_Sql Server_Recursion - Fatal编程技术网

将顶级父级添加到现有SQL查询

将顶级父级添加到现有SQL查询,sql,sql-server,recursion,Sql,Sql Server,Recursion,我的SQL语句有问题。我想将每个对象的顶部父对象添加到每一行。我尝试了一些方法,但我不得不说我基本上是一个SQL初学者 例如: Object A: ID 2, ParentID NULL Object B: ID 10, ParentID 2 Object C: ID 25, ParentID 10 Object D: ID 51, ParentID 25 现在的结果应该是: Object D: ID 51, ParentID 25, TopParent 2 以下是我目前的疑问: With

我的SQL语句有问题。我想将每个对象的顶部父对象添加到每一行。我尝试了一些方法,但我不得不说我基本上是一个SQL初学者

例如:

Object A: ID 2, ParentID NULL
Object B: ID 10, ParentID 2
Object C: ID 25, ParentID 10
Object D: ID 51, ParentID 25
现在的结果应该是:

Object D: ID 51, ParentID 25, TopParent 2
以下是我目前的疑问:

With
  Geraetetypen(TypID, Typname, ParentID, Ebene) As (Select parentTyp.ID,
      parentTyp.geraeteTyp,
      IsNull(parentTyp.parentID, 0) parentID,
     1 As Ebene
From test_table_GeraeteTyp As parentTyp
Where parentTyp.parentID = 0
Union All
Select childTyp.ID,
  childTyp.geraeteTyp,
  childTyp.parentID,
  gt.Ebene + 1 As Ebene
From test_table_GeraeteTyp As childTyp
  Inner Join Geraetetypen As gt On childTyp.parentID = gt.TypID)
Select *
From
Geraetetypen
现在我得到了ID、名称、ParentID和级别


谢谢

将其添加到顶部查询,然后在递归中回显:

With
  Geraetetypen(TypID, Typname, ParentID,       Ebene, TopParent) As (Select parentTyp.ID,
      parentTyp.geraeteTyp,
      IsNull(parentTyp.parentID, 0) parentID,
     1 As Ebene,
     parentTyp.ID TopParent                                                       
From test_table_GeraeteTyp As parentTyp
Where parentTyp.parentID = 0
Union All
Select childTyp.ID,
  childTyp.geraeteTyp,
  childTyp.parentID,
  gt.Ebene + 1 As Ebene,
  gt.TopParent                                                                     
From test_table_GeraeteTyp As childTyp
  Inner Join Geraetetypen As gt On     childTyp.parentID = gt.TypID)
Select *
From
Geraetetypen