如果 Column1 值不为空,则按 Column1 值排序,否则使用 Column2 值

问题描述 投票:0回答:4

在SQL中,有没有一种方法可以组合

ORDER BY
IS NULL
,以便我可以按第1列中的值(如果它不为空)进行排序;如果为空,则按另一列中的值排序?

sql postgresql sql-order-by
4个回答
58
投票

您可以使用 case 表达式:

ORDER BY CASE
    WHEN Column1 IS NOT NULL THEN Column1
    ELSE Column2
END

或者对应的语法糖:

ORDER BY COALESCE(Column1, Column2)

结果将是这样的:

column1 | column2
--------|--------
      1 |    1258
      2 |    5972
   null |       3
      4 |    3698
      5 |    7524

请注意,两列的数据类型必须是可比较的(RDBMS 定义了规则)。


15
投票

试试这个

  ORDER BY COALESCE(fieldA, fieldB);

0
投票

您可以尝试以下方法:

ORDER BY ISNULL(firstField, secondField)

-1
投票

我没有任何可以测试它的Tables atm,但这可能有效,至少在没有可用数据的情况下是有效的:

SELECT * FROM table1
LEFT JOIN table2 ON table1.id = table2.id 
WHERE 1 
ORDER BY IF( table2.id, table1.id, table1.name )

而且我不知道如果table2.id有时为空,顺序会是什么样子,看起来很不稳定。

© www.soinside.com 2019 - 2024. All rights reserved.