2017-07-20 3 views
0

Angesichts die folgende Tabelle:SQL finden Sie den ersten nicht Nullwert mit beliebiger Reihenfolge von

ID | Value 
---------- 
1 | NULL 
2 | B 
3 | C 
4 | NULL 

Ich mag den ersten Nicht-Null-Wert aus der Spalte Wert erhalte nach unterschiedlicher Bestellung, zB:

SELECT FIRST_NON_NULL(Value ORDER BY ID) FROM MY_TABLE 

Diese Rückkehr B

SELECT FIRST_NON_NULL(Value ORDER BY ID DESC) FROM MY_TABLE 

C

Dies wird zurückkehren

P.S. Muss keine Wertfunktion sein, nur die SELECT-Anweisung, die benötigt wird. Vielen Dank.


Bearbeitet: Möchten Sie sehen, ob es eine skalierbare Version geben kann.

ID | Value1 | Value2 
-------------------- 
1 | NULL | AA 
2 | B | NULL 
3 | C | CC 
4 | NULL | NULL 

SELECT FIRST_NON_NULL(Value1, Value2 ORDER BY ID) FROM MY_TABLE 

Dies wird B zurückkehren, AA

SELECT FIRST_NON_NULL(Value1, Value2 ORDER BY ID DESC) FROM MY_TABLE 

Diese C zurück, CC

Antwort

5

Just do:

SELECT TOP 1 Value 
FROM mytable 
WHERE Value IS NOT NULL 
ORDER BY ID 

Um die letzten nicht null Wertschalter zu erhalten die bestellung:

ORDER BY ID DESC 

Um die gleiche Logik auf eine größere Anzahl von Spalten erweitern Sie die folgende Abfrage verwenden:

SELECT (SELECT TOP 1 Value1 FROM mytable 
     WHERE Value1 IS NOT NULL ORDER BY ID) AS min_Value1, 
     (SELECT TOP 1 Value2 FROM mytable 
     WHERE Value2 IS NOT NULL ORDER BY ID) AS min_Value2 

Demo here

+0

Wow, das war schnell. Vielen Dank. – user1589188

+0

Entschuldigung, wie machen Sie es skalierbar? Siehe aktualisierte Frage. – user1589188

+0

@ user1589188 Bitte überprüfen Sie die Änderung, die ich gemacht habe. –

-2

DISTINCT-Anweisung verwendet wird, um das Rück nur distinct (verschiedene) Werte

SELECT distinct TOP 1 Value 
FROM mytable 
WHERE Value IS NOT NULL 
ORDER BY ID desc 
+1

Wie könnte 1 Wert nicht eindeutig sein? – Paparazzi

Verwandte Themen