【问题标题】:How can I order in SQL with conditional statement [closed]如何使用条件语句在 SQL 中排序 [关闭]
【发布时间】:2019-12-23 16:40:28
【问题描述】:
select *
from myaccount .....
order by t.Status, t.OpenDate, r.RegDate

在这种情况下,它是按这三个状态排序的,但我想将结果与状态分开

when status = 0
order by t.OpenDate,r.RegDate

如果其他状态,与按状态排序的原始语句不同,我想混合状态并且仅按 t.OpenDate,r.RegDate 排序

如何使用条件语句来做到这一点?我仍然在尝试这个,但我只能在一个条件下找到方法。

【问题讨论】:

  • 样本数据和期望的结果会有很大帮助。
  • 对于status 的所有值,您的两个排序标准都是相同的。请澄清您的问题。
  • 添加一些示例数据,这个问题在没有上下文的情况下有点令人困惑。您可能希望对日期使用 where 子句。如............ WHERE t.OpenDate >= r.regdate。另外,由于别名不同,您必须加入表,您能否提供完整的查询...非常感谢
  • 也许看看 CTE?正如戈登所说。没有链接数据很难看到。试试sqlfiddle.com
  • 所以status = 0的行应该排在第一位,不管opendateregdate,然后所有status <> 0的行都应该排在前面,按opendate排序,然后是regdate ?

标签: mysql sql sql-order-by


【解决方案1】:

您可以尝试使用CASE 表达式,它在status = 0 时返回的值比在status <> 0 时返回的值低。

...
ORDER BY CASE
           WHEN t.status = 0 THEN
             0
           ELSE
             1
         END,
         t.opendate,
         r.regdate;

【讨论】:

  • 或者,在 MySQL 中,只需 order by (t.status = 0) desc, t.opendate, t.regdate
猜你喜欢
  • 2018-05-05
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2011-01-08
  • 2020-06-27
  • 1970-01-01
  • 2023-01-05
  • 2021-11-03
相关资源
最近更新 更多