如何解决Order By case when then with multiple ASC/DESC
希望这个问题还没有被问过。 我的问题是:
你知道怎么做吗
ORDER BY
CASE
WHEN job = "jounalist" then 1,date desc
WHEN job = "teacher" then 2,class asc
WHEN job = "dev" then 3,code asc
ELSE 4
解决方法
ORDER BY
CASE
WHEN job = "jounalist" then 1
WHEN job = "teacher" then 2
WHEN job = "dev" then 3
ELSE 4
END asc
CASE
WHEN job = "jounalist" then Right(cast(1000000000 + Datediff(second,date,GetDate()) as nvarchar(100)),9)
WHEN job = "teacher" then class
WHEN job = "dev" then code
ELSE N''
END asc
您只能从 case 表达式中返回一种数据类型的单列。我假设 class
和 code
是 nvarchar
列,因此将从日期到现在的时差转换为 nvarchar(100)
。此外,假设列 date
的值在当前日期/时间之前,并且小于 1000000000 秒,因此,其上的表达式提供一个 0 填充的字符串,该字符串可以很好地按与在日期上向后排序相同的方式进行升序排序会排序。
您需要单独的 case
表达式。我不确定 1
、2
和 3
代表什么。让我假设它们的目的是将结果按 CASE
表达式的顺序排列:
ORDER BY (CASE WHEN job = 'journalist' THEN 1
WHEN job = 'teacher' THEN 2
WHEN job = 'dev' THEN 3
ELSE 4
END),(CASE WHEN job = 'journalist' THEN date END) DESC,(CASE WHEN job = 'teacher' THEN class END),(CASE WHEN job = 'code' THEN code END)
CASE
表达式返回单一类型。为此,我不建议将值转换为单一类型。相反,只需在 ORDER BY
中为不同的组使用单独的键。
我还应该指出,某些数据库可能具有可以简化部分代码的特殊功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。