首頁  >  問答  >  主體

如何建立一個SQL查詢,將Col A作為主要排序鍵,但如果Col A為空,則使用Col B作為主要排序鍵?

使用MariaDB,我有一個視圖,提供包含事件日期和是否接受邀請的資訊。 eventdate 是類型為 date 的事件日期。 accepted 是類型為 tinyint 的字段,如果邀請被拒絕,則為0,如果邀請被接受,則為1,否則預設為NULL

我想開發一個查詢,按照acceptedeventdate 排序,這樣我的NULL值會出現在eventdate順序的最前面。然而,如果accepted不為NULL,則希望按照eventdate排序。

我的目前查詢是:

從邀請視圖中選擇* ORDER BY已接受,eventdate

然而,這個查詢將表格排序,使得所有accepted = NULL的值在前面,所有0值在其後,最後所有1值在最後,如下所示:

eventname | eventdate  | accepted
---------------------------------
Event 1   | 2022-04-14 | NULL
Event 2   | 2022-04-25 | NULL
Event 3   | 2022-03-28 | 0
Event 4   | 2022-05-03 | 0
Event 5   | 2022-04-14 | 1
Event 6   | 2022-05-01 | 1

我希望得到類似這樣的結果:

eventname | eventdate  | accepted
---------------------------------
Event 1   | 2022-04-14 | NULL
Event 2   | 2022-04-25 | NULL
Event 3   | 2022-03-28 | 0
Event 5   | 2022-04-14 | 1
Event 6   | 2022-05-01 | 1
Event 4   | 2022-05-03 | 0

P粉052724364P粉052724364421 天前647

全部回覆(1)我來回復

  • P粉242126786

    P粉2421267862023-09-16 09:12:10

    一種方法是使用CASE條件排序結果

    SELECT * 
    FROM  invite_view 
    ORDER BY CASE WHEN accepted IS NULL THEN accepted
                  ELSE eventDate
             END

    結果:

    id eventname eventdate accepted
    1 Event 1 2022-04-14 null
    #2 Event 2 2022-04-25 null
    #3 Event 3 2022-03-28 0
    5 Event 5 2022-04-14 1
    6 Event 6 2022-05-01 1
    4 Event 4 2022-05-03 0

    回覆
    0
  • 取消回覆