【问题标题】:How to sort data with a case statement - using MySQL?如何使用 case 语句对数据进行排序 - 使用 MySQL?
【发布时间】:2013-06-11 12:49:53
【问题描述】:

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

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

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

这是我当前的语法,但我不知道如何拆分订单

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)(情况下(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 订购

【问题讨论】:

    标签: mysql


    【解决方案1】:

    试试:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-01-06
      • 2019-05-07
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      相关资源
      最近更新 更多