Un mio collega ha un problema con una query SQL: -Come sostituire NULL in un set di risultati con l'ultimo valore NOT NULL nella stessa colonna?
Prendiamo il seguente titolo di esempio, due tabelle temporanee: -
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';
Corriamo il seguente query sui tavoli a darci una di risultati aderito: -
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
come 'Dave' non esiste nella tabella #jobs, gli viene dato un valore NULL come previsto.
Il mio collega desidera modificare la query in modo che a ogni valore NULL venga assegnato lo stesso valore della voce precedente.
Così quanto sopra sarebbe: -
name value job
John 10 SQL Expert
Abid 20 Case Statement
Alyn 30 Driver
Dave 15 Driver
Nota che Dave ora è un 'Driver'
Ci può essere più di un valore NULL in sequenza,
name value job
John 10 SQL Expert
Abid 20 Case Statement
Alyn 30 Driver
Dave 15 NULL
Joe 15 NULL
Pete 15 NULL
In questo caso Dave, Joe e Pete dovrebbero essere tutti 'Driver', poiché 'Driver' è l'ultima voce non nulla.
c'è un vincolo di ordine, o sono i driver di Dave, Joe e Pete solo perché vengono restituiti arbitrariamente dopo Alyn? – GolfWolf
Questo è qualcosa che vorresti probabilmente fare in codice, invece. – Magnus
Nell'esempio corrente non vi è alcun ordine, quindi si è appena ritornato arbitrariamente. –