Masalah:
Anda ingin mengurutkan baris menurut nomor bulan, nama bulan yang diberikan (Anda ingin Januari ditampilkan terlebih dahulu, Desember terakhir).
Contoh:
birthday tabel berisi dua kolom:nama dan birthday_month . Bulan ditulis dengan nama, bukan angka.
| nama | bulan_ulang tahun |
|---|---|
| Ronan Tisha | Januari |
| Desember | April |
| Angie Julia | April |
| Narelle Dillan | April |
| Purdie Casey | Januari |
| Donna Nell | NULL |
| Blaze Graeme | Oktober |
Anda ingin mengurutkan baris berdasarkan birthday_month .
Solusi:
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);
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan birthday_month ):
| nama | bulan_ulang tahun |
|---|---|
| Purdie Casey | Januari |
| Angie Julia | April |
| Narelle Dillan | April |
| Blaze Graeme | Oktober |
| Ronan Tisha | Januari |
| Desember | NULL |
| Donna Nell | NULL |
Diskusi:
Untuk mengurutkan baris berdasarkan bulan, Anda memerlukan bulan dalam angka (bukan nama). Anda dapat mengonversi nama bulan menjadi bulan numerik menggunakan CASE WHEN ayat. Setelah CASE kata kunci, tentukan nama kolom. Kemudian, setelah setiap WHEN , nyatakan nilainya di kolom ini, gunakan THEN kata kunci, dan tentukan nilai baru yang ingin Anda tetapkan, bukan yang lama. Di sini, kolomnya adalah birthday_month , nilai saat ini di kolom ini adalah 'January ', 'February ', …, 'December ', dan nilai barunya adalah bulan numerik 1 , 2, …, 12 . Setelah Anda selesai mengonversi semua nilai, ingatlah untuk menggunakan END kata kunci untuk menutup CASE WHEN ayat. Lihat:
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
Ini adalah bagaimana Anda mengubah nama bulan menjadi nomor bulan. Anda dapat menggunakannya untuk mengurutkan baris dalam urutan menaik berdasarkan bulan – cukup gunakan di ORDER BY klausa.
Perhatikan bahwa dalam SQLite, NULL s ditampilkan pertama kali saat mengurutkan dalam urutan menaik dan terakhir saat mengurutkan dalam urutan menurun. Juga, baris dengan birthday_month yang sama ditampilkan dalam urutan acak (Anda dapat melihat Angie Julia kedua dan Narelle Dillan ketiga, atau Narelle Dillan kedua dan Angie Julia ketiga). Untuk mengubah urutan turun, gunakan DESC kata kunci setelah kolom di ORDER BY ayat. Berikut tampilan kuerinya:
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;