Hi @Fazlu AM ,
Welcome to Microsoft Q&A!
Please refer below:
SELECT ID,
CASE WHEN ID=L5ID THEN L4ID WHEN ID=L4ID THEN L3ID WHEN ID=L3ID THEN L2ID WHEN ID=L2ID THEN L1ID END PREVID,
CASE WHEN ID=L5ID THEN L4Name WHEN ID=L4ID THEN L3Name WHEN ID=L3ID THEN L2Name WHEN ID=L2ID THEN L1Name END PREVNAME,
CASE WHEN ID=L5ID THEN L4UniqueId WHEN ID=L4ID THEN L3UniqueId WHEN ID=L3ID THEN L2UniqueId WHEN ID=L2ID THEN L1UniqueId END PREUniqueId
FROM @Hierarchy
OR
;with cte as (
SELECT
t.ID, substring(x.col,2,1) level,x.col, x.value
FROM @Hierarchy t
CROSS APPLY(VALUES
('L1IDD', t.L1ID),
('L1Name', t.L1Name),
('L1UniqueId', t.L1UniqueId),
('L2IDD', t.L2ID),
('L2Name', t.L2Name),
('L2UniqueId', t.L2UniqueId),
('L3IDD', t.L3ID),
('L3Name', t.L3Name),
('L3UniqueId', t.L3UniqueId),
('L4IDD', t.L4ID),
('L4Name', t.L4Name),
('L4UniqueId', t.L4UniqueId),
('L5IDD', t.L5ID),
('L5Name', t.L5Name),
('L5UniqueId', t.L5UniqueId)
)x(col, value))
,cte1 as (
select a.id,SUBSTRING(a.col,3,len(a.col)-2) col,a.value from cte a
inner join cte b
on a.level=b.level-1 and a.id=b.value)
select ID,[IDD] PREVID,[NAME] PREVNAME,[UniqueId] PREUniqueId from
(select id,col,value from cte1) s
pivot
(max(value) for col IN ([IDD],[NAME],[UniqueId])) P
Output:
ID PREVID PREVNAME PREUniqueId
AA11 DD44 DDD DD44
XX21 PP99 PPP PP99
YY32 TT51 TTT TT51
Best regards,
Melissa
If the answer is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.