Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Anda Mengisih Data Secara Dinamik Berdasarkan Pernyataan Bersyarat dalam SQL?

Bagaimanakah Anda Mengisih Data Secara Dinamik Berdasarkan Pernyataan Bersyarat dalam SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 17:54:03537semak imbas

How Do You Dynamically Sort Data Based on a Conditional Statement in SQL?

Bolehkah Anda Memesan dengan Penyata Bersyarat?

Dalam SQL, klausa ORDER BY membenarkan anda untuk menentukan susunan keputusan anda dikembalikan. Walau bagaimanapun, bagaimana jika anda ingin mengisih hasil anda secara dinamik berdasarkan keadaan tertentu?

Masalah:

Seorang pengguna ingin mengisih data secara berbeza bergantung pada nilai dalam lajur yang dipanggil "Jenis." Jika Jenis ialah 'Ahli,' mereka mahu mengisih mengikut nama keluarga dan jika 'Kumpulan', mereka mahu mengisih mengikut nama kumpulan, kedua-duanya dalam tertib menaik.

Pendekatan Awal:

Pengguna cuba menggunakan pernyataan if dalam ORDER BY klausa:

ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC

Penyelesaian:

Walaupun konsepnya betul, SQL tidak menyokong jika pernyataan dalam klausa ORDER BY. Sebaliknya, anda boleh menggunakan sama ada fungsi IF atau pernyataan CASE.

Menggunakan Fungsi IF:

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

Pendekatan ini menggunakan fungsi IF untuk menilai keadaan dan kembalikan medan pengisihan yang sesuai.

Menggunakan KES Pernyataan:

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

Penyata CASE menyediakan cara yang lebih komprehensif untuk mengendalikan berbilang keadaan dan mengembalikan medan pengisihan berbeza berdasarkan setiap syarat.

Atas ialah kandungan terperinci Bagaimanakah Anda Mengisih Data Secara Dinamik Berdasarkan Pernyataan Bersyarat dalam SQL?. 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