[英]How to sort data with a case statement - using MySQL?
我有一個查詢,但我想按以下順序訂購數據:
狀態(所以我的記錄頂部為狀態= 1,底部為狀態2)
如果記錄的status = 1
則按以下順序對其進行排序
a) CASE WHEN i.assigned_to = '.USER_ID.' THEN 0 ELSE 1 END
CASE WHEN i.assigned_to = '.USER_ID.' THEN 0 ELSE 1 END
b) CASE WHEN (i.approved_by > 0 OR i.approved_on IS NOT NULL) THEN 0 ELSE 1 END
c) i.priority DESC
d) i.created_on ASC
如果記錄的status = 2
, completed_on DESC
對記錄進行排序
這是我目前的語法,但我不知道如何拆分訂單
ORDER BY
i.status ASC,
CASE WHEN i.assigned_to = '.USER_ID.' THEN 0 ELSE 1 END,
CASE WHEN (i.approved_by > 0 OR i.approved_on IS NOT NULL) THEN 0 ELSE 1 END,
i.priority DESC,
i.created_on ASC
我的查詢當前通過以下方式對所有記錄進行排序:a)i.assigned_to ='.USER_ID'時的情況。 THEN 0 ELSE 1 END b)(當(i.approved_by> 0或i.approved_on不為空)的情況THEN 0 ELSE 1 END)c)i.priority DESC d)i.created_on ASC
我只希望status = 1
時才按那些排序,否則按completed_on DESC
排序
嘗試:
ORDER BY
i.status ASC,
CASE WHEN i.assigned_to = '.USER_ID.' and i.status = 1 THEN 0 ELSE 1 END,
CASE WHEN (i.approved_by > 0 OR i.approved_on IS NOT NULL) and i.status = 1
THEN 0 ELSE 1 END,
CASE WHEN i.status = 1 THEN i.priority END DESC,
CASE WHEN i.status = 1 THEN i.created_on END ASC,
CASE WHEN i.status = 2 THEN i.completed_on END DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.