按第一个非空列对sql查询结果进行排序



我想按一列对查询结果排序,如果它为空,则按第二列排序。

在MSSQL中,我通常通过使用COEALSCE函数来解决这个问题,因此,我编写了ORDER BY COALESCE(Col1,Col2)

但是,尽管SqlLite中也存在COALESCE函数,但我似乎无法从查询的"order by"部分调用它

你知道我如何对结果进行排序吗?

FIX

COALESCE(Col1,Col2(处理"简单"查询,我真正想要的是对UNION查询的结果进行排序。

CREATE TABLE FOO
(
int ID,
Date1 text,
Date2 text
)
insert into foo values(1,null,'2021-11-12T009:30:00');
insert into foo values(2,'2021-11-12T008:30:00',null);
-- THIS WORKS!
select * from FOO order by coalesce(Date1,Date2)

-- THIS FAILS :(
select * from foo where Date1 = '2021-11-12T008:30:00'
union all
select * from foo where Date2 = '2021-11-12T009:30:00'
order by coalesce(Date1,Date2)

在SELECT子句中包含COALESCE并以此排序。即:

select COALESCE(Date1,Date2) oby,* from foo where Date1 = '2021-11-12T008:30:00'
union all
select COALESCE(Date1,Date2),* from foo where Date2 = '2021-11-12T009:30:00'
order by oby

UNION放入派生表中。

SELECT *
FROM (SELECT *
FROM foo
WHERE date1 = '2021-11-12T008:30:00'
UNION ALL
SELECT *
FROM foo
WHERE date2 = '2021-11-12T009:30:00') x
ORDER BY coalesce(date1,
date2);

最新更新