23

有没有一种方法可以在 sql 中组合ORDER BYIS NULL,以便如果列不为空,我可以按列排序,但如果为空,则按另一列排序?

4

4 回答 4

47

就像是:

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

和写法一样:

ORDER BY COALESCE(Column1, Column2)

两者都应该在任何健全的 RDBMS 中工作。

于 2012-06-12T19:25:03.673 回答
13

尝试这个

  ORDER BY COALESCE(fieldA, fieldB);
于 2012-06-12T19:28:44.353 回答
0

您可以尝试以下方法:

ORDER BY ISNULL(firstField, secondField)
于 2012-06-12T19:24:49.333 回答
-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 有时为空,订单会是什么样子,看起来很不稳定。

于 2012-06-12T19:34:38.347 回答