Sql 如何在SSIS中从同一个表中的不同级别获取父子记录?

Sql 如何在SSIS中从同一个表中的不同级别获取父子记录?,sql,tsql,ssis,Sql,Tsql,Ssis,以下是所需的详细信息和输出 该表有3列: 记录 父记录 活跃的 根据非活动列,输出要求如下所示: e、 g 1 输出 Record Parent_Record Isactive 5 1 1 Record Parent_Record Isactive 5 3 1 e、 G2 输出 Record Parent_Record Isactive 5

以下是所需的详细信息和输出

该表有3列:

  • 记录
  • 父记录
  • 活跃的
  • 根据非活动列,输出要求如下所示:

    e、 g 1

    输出

    Record   Parent_Record   Isactive
        5           1            1
    
     Record   Parent_Record   Isactive
            5           3            1
    
    e、 G2

    输出

    Record   Parent_Record   Isactive
        5           1            1
    
     Record   Parent_Record   Isactive
            5           3            1
    

    您可以使用递归CTE从叶节点开始构建层次结构,然后返回到更高的活动父节点:

    declare @tmp table (Record  int, Parent_Record  int, Isactive bit)
    declare @recordToCheck int = 5
    
    insert into @tmp values
     (1, 0, 1) 
    ,(2, 1, 0)
    ,(3, 1, 0)
    ,(4, 2, 0)
    ,(5, 3, 1)
    
    ;WITH RESULT (Record, Parent_Record, Isactive, Lev)
    AS
    (
        --anchor
        SELECT A.Record,Parent_Record, Isactive, 1 AS LEVEL
        FROM @tmp AS A 
        WHERE A.Record = @recordToCheck
    
        UNION ALL
    
        --outer
        SELECT C.Record, C.Parent_Record, C.Isactive, Lev + 1  
        FROM @tmp AS C
        INNER JOIN RESULT AS B 
        ON C.Record=B.Parent_Record
    )
    select top 1 @recordToCheck as Record, Record as Parent_Record, Isactive 
    from RESULT 
    where Isactive = 1 
    order by lev desc
    
    示例1的结果:

    示例2的结果:


    您可能需要一个递归cte来获取父记录。这个问题应该让你开始。