nullif coalesce, :
declare @source table (PK int, MainValue varchar(6), Signal1 varchar(6), Signal2 varchar(6), Signal3 varchar(6), Signal4 varchar(6), Signal5 varchar(6))
insert into @source values
(1, '12345', 'XYZ', '12345', null, null, null),
(2, '90210', 'ABC', '99999', '90210', null, null),
(3, '970622', 'XYZ', '88888', '34652', '970622', null)
select
PK,
MainValue,
nullif(Signal1, MainValue) as Signal1,
coalesce(nullif(Signal2, MainValue), nullif(Signal1, MainValue)) as Signal2,
coalesce(nullif(Signal3, MainValue), nullif(Signal2, MainValue), nullif(Signal1, MainValue)) as Signal3,
coalesce(nullif(Signal4, MainValue), nullif(Signal3, MainValue), nullif(Signal2, MainValue), nullif(Signal1, MainValue)) as Signal4,
coalesce(nullif(Signal5, MainValue), nullif(Signal4, MainValue), nullif(Signal3, MainValue), nullif(Signal2, MainValue), nullif(Signal1, MainValue)) as Signal5
from @source
, . , :
;with cte (PK, MainValue, Signal1 , Signal2, Signal3, Signal4, Signal5) as
(
select
PK,
MainValue,
nullif(Signal1, MainValue),
case when nullif(Signal1, MainValue) is null then null else nullif(Signal2, MainValue) end,
case when nullif(Signal1, MainValue) is null or nullif(Signal2, MainValue) is null then null else nullif(Signal3, MainValue) end,
case when nullif(Signal1, MainValue) is null or nullif(Signal2, MainValue) is null or nullif(Signal3, MainValue) is null then null else nullif(Signal4, MainValue) end,
case when nullif(Signal1, MainValue) is null or nullif(Signal2, MainValue) is null or nullif(Signal3, MainValue) is null or nullif(Signal4, MainValue) is null then null else nullif(Signal5, MainValue) end
from @source
)
select
PK,
MainValue,
Signal1,
coalesce(Signal2, Signal1) as Signal2,
coalesce(Signal3, Signal2, Signal1) as Signal3,
coalesce(Signal4, Signal3, Signal2, Signal1) as Signal4,
coalesce(Signal5, Signal4, Signal3, Signal2, Signal1) as Signal5
from cte