如何创建一个SQL查询,将Col A作为主要排序键,但如果Col A为空,则使用Col B作为主要排序键?
P粉052724364
P粉052724364 2023-09-15 22:59:52
0
1
679

使用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粉052724364
P粉052724364

全部回复(1)
P粉242126786

一种方法是使用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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板