MySQL-按条件排序

MySQL-按条件排序,mysql,sql,Mysql,Sql,我正在处理一个问题,该问题将按照以下规则对输出进行排序: 如果g.等级>8,则 order by g.grade asc, s.name asc 如果g.grade使用案例,当时: ORDER BY CASE WHEN g.grade > 8 THEN g.grade ELSE (0 - g.grade) END asc, CASE WHEN g.grade > 8 THEN s.name ELSE s.marks END asc 您的第二个大小写表达式有问题。

我正在处理一个问题,该问题将按照以下规则对输出进行排序:

如果g.等级>8,则

order by g.grade asc, s.name asc

如果g.grade使用
案例,当
时:

ORDER BY CASE WHEN g.grade > 8 THEN g.grade ELSE (0 - g.grade) END asc,
         CASE WHEN g.grade > 8 THEN s.name ELSE s.marks END asc

您的第二个
大小写
表达式有问题。一个分支生成一个
varchar
,而另一个分支生成一个数字。这在大多数RDBMS中不起作用,即使它在MySQL中起作用,也应该避免。@TimBiegeleisen嗯,你是对的,我正在考虑如何解决这个问题。我想不出办法,但好消息是你的答案可能对MySQL起作用。@TimBiegeleisen for
MySQL
,它起作用,我已经测试过了。但是
sqlserver
并不完全有效。也许应该对其他RDBMS使用动态sql。
ORDER BY CASE WHEN g.grade > 8 THEN g.grade ELSE (0 - g.grade) END asc,
         CASE WHEN g.grade > 8 THEN s.name ELSE s.marks END asc