CASE inside ORDER BY 多列

CASE inside ORDER BY with multiple columns

我想有条件地订购查询

ORDER BY 
CASE
WHEN TRUE THEN users.name, users.lastname END

但它会引发语法错误 syntax error near or at ","

下面的例子很有魅力

ORDER BY 
CASE
WHEN TRUE THEN users.name END

我也试过了

ORDER BY 
CASE
WHEN TRUE THEN "users.name, users.lastname" END

引发 "users.name, users.lastname" 不存在

    ORDER BY 
CASE
WHEN TRUE THEN "users"."name", "users"."lastname" END

这会引发 syntax error at ","

如何在 ORDER BY 中的 CASE 中放置多个列?

只需使用两个case表达式:

ORDER BY (CASE WHEN TRUE THEN users.name END),
         (CASE WHEN TRUE THEN users.lastname END)

您需要使用 ROW constructor 才能将几列组合在一起

ORDER BY 
CASE
WHEN TRUE THEN ROW(users.name, users.lastname) END

如果 ROW() 中的值超过 1 个,您可以跳过 ROW 关键字。这是带有语法糖的较短版本:

ORDER BY 
CASE
WHEN TRUE THEN (users.name, users.lastname) END