将第7列排序为例 -
此代码根本不对数据进行排序:
ORDER BY CASE WHEN '1'='2' THEN 5
WHEN '1'='1' THEN 7
ELSE 13 END
如果我将其更改为硬编码序数,则可以正常工作:
ORDER BY 7
答案 0 :(得分:2)
只要SELECT
列表中的相应表达式属于同一类型,您就可以使用表达式本身而不是SELECT
列表编号来执行此操作:
SELECT expression1, expression2, ...
...
ORDER BY CASE
WHEN 1=2
THEN expression5
WHEN 1=1
THEN expression7
ELSE expression13
END;
如果数据类型不同,则使用类型转换为季节。
您的查询不起作用,因为只有整数文字才能用作ORDER BY
中的列号。在所有其他情况下,整数代表其常数值。
如果不是这样,ORDER BY
表达式很容易变得含糊不清。请看以下内容:
... ORDER BY intcol + 3;
这是否意味着“添加三个”或“从SELECT
列表中添加三个表达式”?