การใช้ ORDER BY แบบมีเงื่อนไข โดยใช้ DECODE
8 สิงหาคม พ.ศ. 2559 อัมพร พงศ์รุจิกร สำนักคอมพิวเตอร์ เปิดอ่านแล้ว 2 ครั้ง

         เมื่อผู้ใช้งานต้องการค้นหาข้อมูลในระบบ โดยพิมพ์คำค้นดังนี้58530137,58530199,58530143,58530178 ซึ่งเป็นการค้นหาข้อมูลนิสิตครั้งละหลายๆ คน และต้องการให้ข้อมูลเรียงตามลำดับตามที่ได้พิมพ์คำค้นไป

    เราสามารถเขียนคำสั่งในรูปแบบ ดังนี้

SELECT * FROM STUDENT WHERE STUDENTCODE IN

('58530137','58530199','58530143','58530178')

ORDER BY DECODE(STUDENTCODE,

                58530137, 1,

                58530199, 2,

                58530143, 3,

                58530178, 4,

                5) ASC;

ข้อมูลจะถูกกำหนดให้มีค่าเป็น 1, 2, 3, 4 และข้อมูลนอกเหนือจากนี้ให้มีค่าเป็น 5 และเรียงจากน้อยไปหามาก (ASC) 1 ไปถึง 5

 

ผลลัพธ์

 

          หรือสามารถเขียนในรูปแบบ CASE WHEN ... THEN ให้ผลลัพธ์เหมือนกัน (การเขียน​ในรูปแบบ CASE WHEN ... THEN สามารถอ่านเพิ่มเติมจากบทความของ คุณสุกัญญา เรื่อง การใช้ order by แบบมีเงื่อนไข เขียนเมื่อ 10 ก.พ. 58)

ตัวอย่าง

SELECT * FROM STUDENT WHERE STUDENTCODE IN

('58530137','58530199','58530143','58530178')

ORDER BY CASE WHEN STUDENTCODE = '58530137' THEN 1

                    WHEN STUDENTCODE = '58530199' THEN 2

                    WHEN STUDENTCODE = '58530143' THEN 3

                    WHEN STUDENTCODE = '58530178' THEN 4

                    ELSE 5 END;