2010-12-27 6 views
1

Ich weiß, dies ist ein "nicht eingebaut" oder "wie dba denkt", sondern ein Programmierer Ansatz, wie könnte man von 3 Felder anfordern, um die, die nicht null ist, in ein Ergebnis zu erhalten Feld.SQL unite Felder zu einem Ergebnis

Lassen Sie uns sagen, dass wir einen Tisch mit f1,f2,f3,f4,f5.

Sagen wir f2,f3,f4 vom gleichen Typ sind.

Lassen Sie uns sagen, dass der Inhalt der Tabelle

(key1,null,null,value1,value2) 
(key2,null,value3,value4,value5) 
(key3,null,null,null,value6) 

Jetzt Tupel sein, wenn wir das erste Tupel zurückgeben dann bekommen wir (key1) erhalten wir (key1, Wert1, Wert2)

Wenn wir fragen, für key2 bekommen wir (key1,value3,value5)

wenn wir für key3 bitten wir (key1,null,value6)

bekommen Wie ist es möglich, die Felder in der Priorität, wenn y zu erhalten ou haben Wert in f2, dann wird es in das zurückgegebene Feld gesetzt, nur dann, wenn wir Wert in f3 haben, dann wird es in das mittlere zurückgegebene Feld gesetzt, nur dann, wenn wir Wert in f4 haben, wird es in das mittlere zurückgegebene Feld

gesetzt

Das Hauptziel besteht darin, das Ergebnis in ein einzelnes Feld zu bringen und den Overhead am Ergebnisende zu verhindern.

+2

klingt, als ob coalease die Funktion, die Sie brauchen, ist –

Antwort

4

Als Bernd_k vorgeschlagen, COALESCE ist dein Freund hier

SELECT [key], COALESCE(f2, f3, f4), f5 
FROM YourTable 
2
Select IsNull(IsNull(f1, f2), f3))