簡體   English   中英

SQL ORDER BY 第一列,但如果第一列為空,則用第二列中的值替換空值

[英]SQL ORDER BY 1st column, but if 1st column is empty replace the empty value by a value from 2nd column

我有一個 sql 表,其中有幾列,其中兩列是事件的開始時間和結束時間。 查詢從表中提取行並按開始時間對其進行排序——結束時間與排序無關。 但是在極少數情況下,可能會有一個沒有開始時間的條目。 在這種情況下,我希望查詢處理它,就像開始時間與結束時間的值相同一樣,因此它不會放在表的開頭:

示例數據:

|   Start  |  Finish  |
| -------- | -------- |
| 15:31:00 | 15:39:00 |  1st Event
| 00:00:00 | 15:36:00 |  2nd Event
| 15:37:00 | 15:42:00 |  3rd Event

查詢如下所示:

SELECT FROM table ORDER BY Start ASC

顯然,現在發生的情況是,第二個事件(開始時間為空)將在列表的頂部或底部結束,具體取決於 ASC 或 DESC 參數。

我想要的是將其放入列表中,就好像開始時間也是 15:36:00 一樣。 好像有個function說

If Start is '00:00:00'
then Start = Finish

像做一個 COALESCE

SELECT FROM table ORDER BY COALESCE(Start, Finish)

不是一個選項,因為事件有不同的長度,在這個例子中,事件 2 的結束時間早於事件 1 的結束時間,所以它仍然會在列表的開頭結束。

有什么方法可以直接在 SQL 查詢中執行此操作?

最好的祝福!

您可以使用CASE表達式進行排序:

SELECT *
FROM yourTable
ORDER BY CASE WHEN Start <> '00:00:00' THEN Start ELSE `End` END;

請注意, END是 MySQL 中的關鍵字,因此您應該避免使用它來命名您的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM