簡體   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