2016-07-19 10 views
-2

Mein Ziel ist es, alle Elemente aus der Tabelle zu gewinnen cat.CAT_RUTAS und ich hinzufüge, eine Art null in die Liste mit dem Wert ‚Enlistar Todas las rutas‘, also ich möchte, dass der null Wert sein die erste Option des Ergebnisses und sortieren Sie die Restwerte aufsteigend.Fehler Sortierung nulls ersten MSSQL

Ich verwende MSSQL-Server, aber wenn ich versuche, diese Abfrage auszuführen:

select CATrut_iIdentificador, CATrut_vDescripcion 
from cat.CAT_Rutas 
UNION 
SELECT NULL , 'Enlistar todas las rutas' 
order by CATrut_vDescripcion ASC NULLS FIRST 

Das Problem ist, wenn ich versuche, den Nullwert an die Spitze hinzuzufügen. Empfangen des Fehlers:

Falsche Syntax in der Nähe von 'NULLS'.

+3

'ORDER BY-Spalte NULLS FIRST' ist nicht gültig SQL Server-Syntax – Lamak

+0

Sie sortieren nur nach der falschen Spalte? In einem der Kommentare hast du gesagt, dass du zuerst 'Enlistar todas las rutas' willst. Aber Sie sortieren nicht nach dieser Spalte. Wechseln Sie zu "Order by CATrut_iIdentificador" –

+0

@SeanLange, er möchte zunächst alle NULL in der ID-Spalte sortieren und dann die anderen Spalten alphabetisch nach Beschreibung. –

Antwort

1

Hier ist eine weitere Option, die einfach eine neue Spalte zum Sortieren hinzufügt.

+0

Aber was ist, wenn in der Spalte 'CATrut_iIdentificador' NULLEN stehen? hmm? ;) –

+0

@TabAlleman - Ich sehe nicht in der Frage, wo das auf die eine oder andere Weise diskutiert wird. Die Frage geht diese Möglichkeit nicht im geringsten an. –

+0

Nein, tut es nicht. Ich habe nur darauf hingewiesen, dass dies der Fall sein könnte. Und selbst wenn dies der Fall ist, ist nicht klar, welche Ergebnisse in diesem Fall wünschenswert wären. –

5

Auftrag zuerst von einem CASE Ausdruck wie folgt aus:

ORDER BY 
    CASE WHEN CATrut_iIdentificador IS NULL THEN 0 ELSE 1 END, 
    CATrut_vDescripcion ASC 
+0

Alle 3 Antworten, die aufgetaucht sind, sind korrekt. Meiner Meinung nach ist diese Variante am flexibelsten, da sie nach einer beliebigen Anzahl von benutzerdefinierten Werten/Kriterien sortiert werden kann. –

+0

Ich bin nicht sicher, dass OP versteht, dass Sie dann mit einer anderen Art auf 'CATrut_vDescripcion' folgen würden. Vielleicht zur Klarheit hinzufügen? – shawnt00

+0

Oh, gut. :) –

0

entfernen, dass NULLS FIRST es keine vorhanden solche Syntax ist. Es sollte eher

sein
select CATrut_iIdentificador, CATrut_vDescripcion 
from cat.CAT_Rutas 
UNION 
SELECT NULL , 'Enlistar todas las rutas' 
order by CATrut_vDescripcion 
+0

Ja, das Problem ist, dass ich die 'Enlistar todas las rutas' an der Spitze der Liste haben möchte, und wie Sie sehen können, ist der Wert null. Ich möchte dieses Ergebnis: –

+0

Enlistar todas las rutas Wert 1 –

+0

Das gleiche Problem wie Mureiniks Antwort. Sehen Sie sich die ursprüngliche Abfrage genau an. OP möchte nach NULL in der Spalte ID sortiert und dann in der Spalte Beschreibung alphabetisch sortiert werden. Es ist nicht die gleiche Spalte. –

2

MS SQL Server unterstützt die nulls first Klausel nicht. Doch am order by clause documentation suchen, werden Sie sehen, dass:

Null values are treated as the lowest possible values.

So mit einer asc Bestellung, Sie müssen nichts tun, die null s wird zuerst kommen trotzdem:

select CATrut_iIdentificador, CATrut_vDescripcion 
from cat.CAT_Rutas 
UNION 
SELECT NULL , 'Enlistar todas las rutas' 
order by CATrut_vDescripcion ASC 
+0

Außer in den Beispieldaten ist die Descripcion-Spalte nicht die, die NULL sein kann. –