Rumah  >  Artikel  >  pangkalan data  >  Bolehkah Anda Mengisih Data Secara Dinamik dalam SQL Berdasarkan Keadaan?

Bolehkah Anda Mengisih Data Secara Dinamik dalam SQL Berdasarkan Keadaan?

Linda Hamilton
Linda Hamiltonasal
2024-11-19 09:02:02926semak imbas

Can You Dynamically Sort Data in SQL Based on a Condition?

Bolehkah anda Sertakan Pernyataan "Jika" dalam ORDER BY?

Dalam SQL, klausa ORDER BY digunakan untuk mengisih hasil pertanyaan dalam tertib menaik atau menurun. Namun, bagaimana jika anda ingin menggunakan kriteria pengisihan yang berbeza berdasarkan syarat?

Cabarannya:

Andaikan anda mempunyai jadual dengan lajur yang dipanggil "Jenis" yang menunjukkan sama ada rekod mewakili "Ahli" atau "Kumpulan." Anda ingin memesan keputusan mengikut nama keluarga ahli jika jenisnya ialah "Ahli" dan mengikut nama kumpulan jika jenisnya ialah "Kumpulan."

Percubaan Salah:

Seseorang mungkin pada mulanya mencuba pertanyaan berikut:

SELECT * 
FROM table 
WHERE STATUS = 'Active' 
ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC

Penyelesaian Betul:

Sebaliknya, terdapat dua pendekatan yang berdaya maju:

1. Fungsi IF:

Fungsi IF MySQL membenarkan anda menilai secara bersyarat sesuatu ungkapan dan mengembalikan satu nilai jika syarat itu benar dan nilai lain jika ia palsu. Begini cara menggunakannya secara ORDER BY:

ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC

2. Penyata KES:

Penyata CASE menyediakan cara yang lebih fleksibel untuk mengendalikan berbilang keadaan. Ia menilai keadaan dan mengembalikan nilai khusus untuk setiap kes yang sepadan. Keputusan pernyataan CASE menjadi kriteria pengisihan:

ORDER BY 
    CASE `type` 
        WHEN 'Member' THEN LNAME 
        WHEN 'Group' THEN GROUPNAME
        ELSE 1 END 
    ASC

Nota:

Dalam pernyataan CASE, "ELSE 1" memastikan bahawa rekod tanpa padanan nilai jenis diisih pada penghujung.

Atas ialah kandungan terperinci Bolehkah Anda Mengisih Data Secara Dinamik dalam SQL Berdasarkan Keadaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn