首页  >  问答  >  正文

如何创建一个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粉052724364370 天前617

全部回复(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
  • 取消回复