【问题标题】:How to get a Parent-Child record from different level in a same table in SSIS?如何在 SSIS 的同一张表中从不同级别获取父子记录?
【发布时间】:2018-08-29 23:24:51
【问题描述】:

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

表格有 3 列:

  1. 记录
  2. 父记录
  3. 处于活动状态

基于非活动列所需的输出如下:

例如 1

Record  Parent_Record  Isactive
  1            0         1 
  2            1         0
  3            1         0
  4            2         0
  5            3         1

输出

Record   Parent_Record   Isactive
    5           1            1

例如 2

  Record  Parent_Record  Isactive
      1            0         0 
      2            1         0
      3            1         1
      4            2         0
      5            3         1

输出

 Record   Parent_Record   Isactive
        5           3            1

【问题讨论】:

标签: sql tsql ssis


【解决方案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 的结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多