如何使用条件语句在 SQL 中排序 [关闭]

Posted

技术标签:

【中文标题】如何使用条件语句在 SQL 中排序 [关闭]【英文标题】:How can I order in SQL with conditional statement [closed] 【发布时间】: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 ? 【参考方案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

以上是关于如何使用条件语句在 SQL 中排序 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQL 如何根据两个字段排序

短路是不是使程序的执行更快,并且分析在条件语句中首先放置的语句是不是值得? [关闭]

在 SQL 中排序时如何比较同一表中的两行?

SQL - 仅在条件匹配时选择 [关闭]

如何在同一列或不同列的一个sql语句中两次使用'BETWEEN'条件

Openacc:如何使插入排序更加并行[关闭]