繁体   English   中英

按来自两个不同列的第一个非空结果排序

[英]Order by first non-null result that comes from two different columns

我想浏览表中两列的所有值:

  • 如果第 1 列中的值不是 null,则为 select,否则 select 为第 2 列中的值。
  • 然后按字母升序对最终结果进行排序,无论列的值来自何处。

我尝试了以下查询,但它不起作用,我什至不确定它是否应该做我想做的事情。

SELECT * 
FROM table 
ORDER BY (CASE WHEN col1 IS NOT NULL THEN 1 ELSE 2 END ), 
         col1 DESC, 
         col2 DESC)

除了它不起作用(没有输出)这一事实之外,它似乎对每一列的值分别进行排序,而我想对检索到的最终值集进行排序,而不管它们来自哪一列。

谢谢您的帮助。

如果你想用CASE表达式修复它,它看起来像下面这样:

SELECT *, 
       CASE WHEN col1 IS NOT NULL 
            THEN col1 
            ELSE col2 
       END AS col
FROM table 
ORDER BY col

虽然一个不错的选择是使用COALESCE function。它返回 arguments 列表中的第一个非空值。

SELECT *, COALESCE(col1, col2) AS col
FROM table 
ORDER BY col

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM