排序列#7为例 -ORDER BY CASE和序号不工作
此代码不会将数据在所有排序:
ORDER BY CASE WHEN '1'='2' THEN 5
WHEN '1'='1' THEN 7
ELSE 13 END
如果我将其更改为硬-coded序数它的工作原理:
ORDER BY 7
排序列#7为例 -ORDER BY CASE和序号不工作
此代码不会将数据在所有排序:
ORDER BY CASE WHEN '1'='2' THEN 5
WHEN '1'='1' THEN 7
ELSE 13 END
如果我将其更改为硬-coded序数它的工作原理:
ORDER BY 7
只要在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
列表”添加表情第三?
那么一个案例和序数组合实际上是不可能的?我确实可以使用完整的列表达式来工作。 –
@JanineRawnsley:对。 [引自手册](https://www.postgresql.org/docs/current/static/sql-select.html#SQL-ORDERBY)“*每个表达式可以是输出列的名称或序号(SELECT列表项),**或**它可以是由输入列值组成的任意表达式*“ –
这是不可能的,是的。我已经给答案添加了一个解释。 –
'1'='2'等被用于证明问题的目的。它们实际上是真正的/错误的表达。 –