簡體   English   中英

如何使用case語句對數據進行排序-使用MySQL?

[英]How to sort data with a case statement - using MySQL?

我有一個查詢,但我想按以下順序訂購數據:

  1. 狀態(所以我的記錄頂部為狀態= 1,底部為狀態2)

  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

  3. 如果記錄的status = 2completed_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM