Sql 从两个父列中的任一列获取所有子项和子项

Sql 从两个父列中的任一列获取所有子项和子项,sql,sql-server,Sql,Sql Server,我需要找到所有父子关系,它们都链接到我的主列ID 到目前为止,我已经尝试了下面的方法,但是只有一个专栏可以使用 WITH tb (id,Name, Level, Path, Parent) AS ( SELECT id,Name, 1 AS Level, CAST('/'+Name as nvarchar(max)) as Path, CAST(NULL as nvarchar(max)) as Parent FROM krishtest WHER

我需要找到所有父子关系,它们都链接到我的主列
ID

到目前为止,我已经尝试了下面的方法,但是只有一个专栏可以使用

    WITH tb  (id,Name, Level, Path, Parent)
AS
(
 SELECT 
    id,Name, 1 AS Level, 
    CAST('/'+Name as nvarchar(max)) as Path,
    CAST(NULL as nvarchar(max)) as Parent
 FROM krishtest
 WHERE parent1 IS NULL

 UNION All

 SELECT 
    e.id,e.Name, x.Level + 1 AS Level, x.Path + '/' + e.Name as Path,
    REVERSE(SUBSTRING( REVERSE(x.[Path]) ,0 , CHARINDEX( '/', REVERSE(x.[Path])) )) as [Parent]
 FROM krishtest e
 JOIN tb x ON x.id = e.parent1


)
SELECT Name, Level, Path, Parent FROM tb

据我所知,父项可以位于parent1或parent2列中;那么在这种情况下,您的查询应该如下

唯一的变化是使用关键字,它从列表中获取第一个非空值

错误假设parent1和parent2不在一起(非Null)。


有父母2的逻辑是什么?@Ultimater与父母1相同。parent1或Parent2将拥有详细信息[将来可能是parent3或Parent4]。所以我需要基于此创建输出。如果您有选择权,您应该将其更改为两个表。第一个将只有ID和Name列。第二个将有两列,ChildID和ParentID,每个关系一行。@KrishOnline这种在接受答案后编辑问题的方式在SO中通常是不受欢迎的。根据你的编辑,你一定要问一个新问题。[变色龙问题并不能真正帮助你解决向别人寻求帮助的目的SO@KrishOnline你的问题最初是关于选择的,现在它说明了一个完全不同的问题。如果你发布一个新问题,我肯定会尝试回答。酷。我会做的
;
WITH tb  (id,Name, Level, Path, Parent)
AS
(
 SELECT 
    id,Name, 1 AS Level, 
    CAST('/'+Name as nvarchar(max)) as Path,
    CAST(NULL as nvarchar(max)) as Parent
 FROM krishtest
 WHERE COALESCE(parent1,parent2) IS NULL

 UNION All

 SELECT 
    e.id,e.Name, x.Level + 1 AS Level, x.Path + '/' + e.Name as Path,
    REVERSE(SUBSTRING( REVERSE(x.[Path]) ,0 , CHARINDEX( '/', REVERSE(x.[Path])) )) as [Parent]
 FROM krishtest e
 JOIN tb x ON x.id = COALESCE(e.parent1,e.parent2)


)
SELECT Name, Level, Path, Parent FROM tb