Как получить запись Parent-Child с другого уровня в одной и той же таблице в SSIS? - PullRequest
0 голосов
/ 30 августа 2018

Ниже приведена подробная информация и требуемый вывод.

Таблица имеет 3 столбца:

  1. Запись
  2. Родительская запись
  3. IsActive

Требуется вывод, как показано ниже на основе неактивного столбца:

например, 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

1 Ответ

0 голосов
/ 30 августа 2018

Вы можете использовать рекурсивный 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:

enter image description here

Результат, например, 2:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...