代码之家  ›  专栏  ›  技术社区  ›  Bachir Messaouri

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

  •  1
  • Bachir Messaouri  · 技术社区  · 3 年前

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

    • 如果第1列中的值不为null,请选择它,否则请选择第2列中的数值。
    • 然后按字母升序对最终结果进行排序,无论其值来自哪一列。

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

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

    除了它不起作用(没有输出)之外,它似乎对每列的值进行了单独排序,而我想对检索到的最后一组值进行排序,无论它们来自哪列。

    谢谢你的帮助。

    1 回复  |  直到 3 年前
        1
  •  1
  •   lemon    3 年前

    如果你想用修复它 CASE 表达式,看起来如下所示:

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

    虽然一个不错的选择是使用 COALESCE 作用它返回参数列表中的第一个非null值。

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