Lỗi sql khi sử dụng case trong order

tôi có đoạn SQL:

 SELECT * FROM OrderDetails
    ORDER BY OrderDetailID (CASE
    WHEN OrderDetailID < 10 THEN ASC
    ELSE DESC
    END);

Thế nhưng nó báo lỗi “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ASC ELSE DESC END)’ at line 3”

Ý tưởng: Nếu id < 10 thì sẽ sắp sếp theo kiểu ASC (Đặt là $A) Bây giờ nếu id>=1 thì sắp sắp sếp theo kiểu DESC (Đặt là $B) => Kết quả trả về theo thứ tự là $B, $A (Chỉ dùng sql)

Bạn nên dùng UNION và 2 query.

(
SELECT ...
WHERE OrderDetailID < 10
ORDER BY OrderDetailID ASC
)
UNION
(
SELECT ...
WHERE OrderDetailID >= 10
ORDER BY OrderDetailID DESC
)

Vì THEN của case theo mình nhớ là một một giá trị, chứ không phải là một statement hay một keyword. Và bạn bỏ ASC/DESC ko phải là một giá trị để so sánh nên sai.

7 Likes

UNION ALL thì đỡ lag hơn :smiley:UNION thì phải loại bỏ các dòng trùng nhau.

3 Likes

Từ 10 trở lên, cho nó thành số âm thì tự nhiên nó sẽ DESC thôi, đâu cần union làm gì !

  SELECT * 
    FROM OrderDetails
   ORDER BY (CASE WHEN OrderDetailID < 10 
                  THEN OrderDetailID 
             ELSE      OrderDetailID*-1  
             END) ASC ;
5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?