如何使用条件语句在 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
的行应该排在第一位,不管opendate
和regdate
,然后所有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 中排序 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
短路是不是使程序的执行更快,并且分析在条件语句中首先放置的语句是不是值得? [关闭]