Saya ingin kueri saya mengembalikan baris tabel di mana kolom berisi nilai tertentu terlebih dahulu, lalu mengembalikan sisa baris menurut abjad.
Jika saya memiliki tabel seperti contoh ini:
- Table: Users
- id - name - city
- 1 George Seattle
- 2 Sam Miami
- 3 John New York
- 4 Amy New York
- 5 Eric Chicago
- 6 Nick New York
Dan menggunakan tabel itu, saya ingin kueri saya mengembalikan baris yang berisi New York terlebih dahulu, dan kemudian baris lainnya diurutkan berdasarkan kota. Apakah ini mungkin dilakukan dengan hanya menggunakan satu kueri?
sql
sql-order-by
Phoexo
sumber
sumber
Jawaban:
Di SQL Server, Oracle, DB2, dan banyak sistem database lainnya, inilah yang dapat Anda gunakan:
sumber
ELSE 2
Bagian berarti bahwa sementara New York mendapat nilai 1, semua nilai-nilai lain mendapatkan nilai 2. ... setidaknya sejauh urutan yang bersangkutan.Jika dialek SQL Anda cukup cerdas untuk memperlakukan ekspresi boolean sebagai nilai numerik, Anda dapat menggunakan:
sumber
ORDER BY
klausa.CASE
pernyataan (yang merupakan SQL standar) SQL Server dapat menggunakan ekspresi dalamORDER BY
klausa dengan sangat baik . " terlalu bodoh untuk memproses uji kesetaraan " adalah salah. Jika semuanya harus terbaca: " tidak mendukung casting implisit MySQL dari booleantrue
ke nilai1
(satu). "ORDER BY id = 123 DESC, name ASC
Jawaban saya mungkin lama dan tidak wajib tetapi seseorang mungkin membutuhkan pendekatan yang berbeda, maka posting di sini.
Saya memiliki persyaratan yang sama menerapkan ini, bekerja untuk saya.
PS
ini untuk SQL
sumber