Un colega mío tiene un problema con una consulta SQL: -¿Cómo reemplazar NULL en un conjunto de resultados con el último valor NOT NULL en la misma columna?
tomar las siguientes como ejemplo, dos tablas temporales: -
select 'John' as name,10 as value into #names
UNION ALL SELECT 'Abid',20
UNION ALL SELECT 'Alyn',30
UNION ALL SELECT 'Dave',15;
select 'John' as name,'SQL Expert' as job into #jobs
UNION ALL SELECT 'Alyn','Driver'
UNION ALL SELECT 'Abid','Case Statement';
Llevamos a cabo la siguiente consulta en las tablas para darnos una de resultados unió: -
select #names.name, #names.value, #jobs.job
FROM #names left outer join #jobs
on #names.name = #jobs.name
name value job
John 10 SQL Expert
Abid 20 Case Statement
Alyn 30 Driver
Dave 15 NULL
como no existe 'Dave' en la tabla #jobs, se le da un valor NULL como se esperaba.
Mi colega desea modificar la consulta para que cada valor NULO tenga el mismo valor que la entrada anterior.
Así que lo anterior sería: -
name value job
John 10 SQL Expert
Abid 20 Case Statement
Alyn 30 Driver
Dave 15 Driver
Nota que Dave es ahora un 'Controlador'
Puede haber más de un valor NULL en secuencia,
name value job
John 10 SQL Expert
Abid 20 Case Statement
Alyn 30 Driver
Dave 15 NULL
Joe 15 NULL
Pete 15 NULL
En en este caso, Dave, Joe y Pete deberían ser todos 'Conductores', ya que 'Conductor' es la última entrada no nula.
¿Hay una restricción de orden o son los controladores Dave, Joe y Pete solo porque se devuelven arbitrariamente después de Alyn? – GolfWolf
Esto es algo que probablemente quieras hacer en código. – Magnus
En el ejemplo actual, no hay orden, por lo que solo se devuelve arbitrariamente. –