如何使用case语句对数据进行排序 - 使用MySQL?

时间:2013-06-14 19:20:15

标签: mysql

我有一个查询,但我想按以下顺序排序数据:

  1. 状态(所以我在顶部有状态= 1,在底部有状态2的记录)

  2. 如果记录有status = 1,则按以下顺序排列 a)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 = 2,则按completed_on DESC

  4. 排序记录

    这是我目前的语法,但我无法弄清楚如何拆分订单

    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时的情况。然后0结束1结束 b)(CASE WHEN(i.approved_by> 0或i.approved_on IS NOT NULL)那么0 ELSE 1 END) c)i.priority DESC d)i.created_on ASC

    并且我希望它只有在status = 1completed_on DESC

    排序的情况下才能按顺序排序

1 个答案:

答案 0 :(得分:0)

尝试:

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