Problem:
Sie möchten die Zeilen nach Monatsnummer und gegebenen Monatsnamen sortieren (Januar soll zuerst angezeigt werden, Dezember zuletzt).
Beispiel:
Der birthday Tabelle enthält zwei Spalten:name und birthday_month . Die Monate werden in Namen angegeben, nicht in Zahlen.
| name | Geburtstagsmonat |
|---|---|
| Ronan Tisha | Januar |
| Dezember | April |
| Angie Julia | April |
| Narelle Dillan | April |
| Purdie Casey | Januar |
| Donna Nell | NULL |
| Blaze Graeme | Oktober |
Sie möchten die Zeilen nach birthday_month sortieren .
Lösung:
SELECT *
FROM birthday
ORDER BY
(CASE birthday_month
WHEN 'January' THEN 1
WHEN 'February' THEN 2
WHEN 'March' THEN 3
WHEN 'April' THEN 4
WHEN 'May' THEN 5
WHEN 'June' THEN 6
WHEN 'July' THEN 7
WHEN 'August' THEN 8
WHEN 'September' THEN 9
WHEN 'October' THEN 10
WHEN 'November' THEN 11
WHEN 'December' THEN 12
END);
Das Ergebnis sieht so aus (die Zeilen sind in aufsteigender Reihenfolge nach birthday_month sortiert ):
| name | Geburtstagsmonat |
|---|---|
| Purdie Casey | Januar |
| Angie Julia | April |
| Narelle Dillan | April |
| Blaze Graeme | Oktober |
| Ronan Tisha | Januar |
| Dezember | NULL |
| Donna Nell | NULL |
Diskussion:
Um die Zeilen nach Monat zu sortieren, benötigen Sie die Monate in Zahlen (nicht Namen). Mit dem CASE WHEN können Sie Monatsnamen in numerische Monate umwandeln Klausel. Nach dem CASE Schlüsselwort geben Sie den Namen der Spalte an. Dann nach jedem WHEN , geben Sie den Wert in dieser Spalte an, verwenden Sie den THEN Schlüsselwort und geben Sie den neuen Wert an, den Sie anstelle des alten zuweisen möchten. Hier ist die Spalte birthday_month , sind die aktuellen Werte in dieser Spalte 'January ', 'February ', …, 'December ', und die neuen Werte sind die numerischen Monate 1 , 2, …, 12 . Nachdem Sie alle Werte konvertiert haben, denken Sie daran, das END zu verwenden Schlüsselwort zum Schließen des CASE WHEN Klausel. Schau mal:
CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END
So wandeln Sie einen Monatsnamen in eine Monatszahl um. Sie können es verwenden, um die Zeilen in aufsteigender Reihenfolge nach Monat zu sortieren – verwenden Sie es einfach im ORDER BY Klausel.
Beachten Sie, dass in SQLite NULL s werden bei aufsteigender Sortierung zuerst und bei absteigender Sortierung zuletzt angezeigt. Auch die Zeilen mit demselben birthday_month werden in zufälliger Reihenfolge angezeigt (möglicherweise sehen Sie Angie Julia zweitens und Narelle Dillan drittens oder Narelle Dillan zweitens und Angie Julia Dritter). Um die Reihenfolge auf absteigend zu ändern, verwenden Sie DESC Stichwort nach der Spalte im ORDER BY Klausel. So sollte die Abfrage aussehen:
SELECT *
FROM birthday
ORDER BY
(CASE birthday_month
WHEN 'January' THEN 1
WHEN 'February' THEN 2
WHEN 'March' THEN 3
WHEN 'April' THEN 4
WHEN 'May' THEN 5
WHEN 'June' THEN 6
WHEN 'July' THEN 7
WHEN 'August' THEN 8
WHEN 'September' THEN 9
WHEN 'October' THEN 10
WHEN 'November' THEN 11
WHEN 'December' THEN 12
END) DESC;