Это может быть легко достигнуто с помощью таблиц CTE - только один из способов сделать это.
, что вы можете сделать, это выбрать отдельную последовательность и строковое значение, где строковое значение не равно нулю, в cte или во временной таблице ... затем, когда у вас есть последний набор данных, присоедините набор данных обратно к временной таблице илиcte на порядковом номере .. и заполните пустые значения строковым значением.имеет смысл?
как то так
if OBJECT_ID ('tempdb..#string_values') is not null
drop table #string_values
;with mycte as ( -- this is the distinct set of sequence and associated string values that are not null
select 1 as sequence , '20190117-7h40m/1/1' as string_value
union all
select 3 as sequence , '20190117-7h40m/2/1' as string_value
union all
select 4 as sequence , '20190117-7h40m/3/1' as string_value
)
select * -- putting everything into a temp table
into
#string_values
from mycte
-- this is your data set please note that the sequence has been included
;with my_dataset as (
select 'Diameter' as PAT_ID , 'CDC' as ME, null as STRING_VALUE , 9.83 as NUM_value, 0 as Source_CD_Sequence, 1 as sequence
union all
select 'Hardness' as PAT_ID , 'CDC' as ME, null as STRING_VALUE , 17.3 as NUM_value, 0 as Source_CD_Sequence , 1 as sequence
union all
select 'Hardness' as PAT_ID , 'CDC' as ME, '20190117-7h40m/3/1' as STRING_VALUE , null as NUM_value, 0 as Source_CD_Sequence , 1 as sequence
)
Select
my_dataset.PAT_ID
,my_dataset.ME
,isnull(my_dataset.STRING_VALUE,string_val.string_value) as STRING_VALUE
,my_dataset.NUM_value
,my_dataset.Source_CD_Sequence
from my_dataset
inner join #string_values string_val
on string_val.sequence = my_dataset.sequence