2010-01-12 5 views
447

Ich versuche, nach mehreren Spalten in SQL und in verschiedenen Richtungen zu sortieren. column1 würde absteigend sortiert werden, und column2 aufsteigend.Reihenfolge der SQL-Mehrfachspalte

Wie kann ich das tun?

+60

Dies ist das „googeln Antworten“ erste Ergebnis. Zumindest war es, als ich "SQL-Ordering by zwei Spalten" googelte. Es ist deutlich lesbarer als die entsprechende offizielle Dokumentseite, die nicht einmal auf meiner ersten Suchergebnisseite erschien, bis ich meine Abfrage in "mysql 'order by" änderte. –

+6

Gegeben, wie oft eine SO-Frage von Google kommt Ich finde es immer schrecklich, dass Leute damit antworten. SO ist entweder hier, um zu antworten oder nicht, und ich kann nicht verstehen, warum das Leiten von Site-Traffic weg ist eine gute Sache – user001

Antwort

722
ORDER BY column1 DESC, column2 

Diese sortiert alles von column1 (absteigend) zuerst, und dann durch column2 (aufsteigend, dies ist die Standardeinstellung), wenn die column1 Felder für zwei Reihen gleich sind.

+1

hier, wie man Spalte1 oder Spalte2 bestellt? – PoliDev

+0

@PoliDev, Zuerst sortiert er nach column1 in DESCending order und nach column2 (in ASCending order) – zaheer

+62

Aus Gründen der Übersichtlichkeit sortiert er zuerst alles nach 'column1' und dann nach' column2', wenn die 'column1' Felder für zwei Zeilen gleich sind . –

115
SELECT * 
FROM mytable 
ORDER BY 
     column1 DESC, column2 ASC 
264

Die anderen Antworten fehlt ein konkretes Beispiel, so geht es hier:

die folgenden Menschen Tabelle:

FirstName | LastName | YearOfBirth 
---------------------------------------- 
    Thomas | Alva Edison | 1847 
    Benjamin | Franklin | 1706 
    Thomas | More  | 1478 
    Thomas | Jefferson | 1826 

Wenn Sie die Abfrage unter ausführen:

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC 

Die Ergebnismenge sieht wie folgt aus:

FirstName | LastName | YearOfBirth 
---------------------------------------- 
    Thomas | More  | 1478 
    Thomas | Jefferson | 1826 
    Thomas | Alva Edison | 1847 
    Benjamin | Franklin | 1706 
+11

Diese Antwort ist eine großartige Ergänzung zu der sehr hilfreichen und kurzen Antwort. – enderland

+2

Das ist ein gutes Beispiel, viele denken, dass wie Sie 2 Spalten auf einmal sortieren können, was tatsächlich nicht passiert, selbst wenn Sie 2 Spalten für die Bestellanfrage setzen –

+0

'Select *' * * –

8

Mehrere Reihenfolge der Spalten hängt von den beiden entsprechenden Werte der Spalte: Hier ist meine Tabelle Beispiel, in dem zwei mit Alphabete und Zahlen und die Werte in diesen beiden Spalten mit den Namen Spalten asc und ab Aufträge.

enter image description here

Jetzt führe ich Order By in diesen beiden Spalten von unten Befehl ausführen:

enter image description here

nun wieder einfügen ich neue Werte in diesen beiden Spalten, wo Alphabet Wert in ASC bestellen:

enter image description here

und die Spalten in Beispieltabelle sehen so aus. nun wieder die gleiche Operation durchführen:

enter image description here

Sie können die Werte in der ersten Spalte zu sehen sind in Ordnung, aber ab zweite Spalte ist nicht in ASC Reihenfolge.

2

Sie können mehrere Bestell auf mehrere Bedingung verwenden,

ORDER BY 
    (CASE 
     WHEN @AlphabetBy = 2 THEN [Drug Name] 
     END) ASC, 
    CASE 
     WHEN @TopBy = 1 THEN [Rx Count] 
     WHEN @TopBy = 2 THEN [Cost] 
     WHEN @TopBy = 3 THEN [Revenue] 
    END DESC 
+0

Funktioniert die Indizierung, wenn ich "CASE" in "ORDER BY" verwende? –