我对订购SQL表有疑问。我已经尝试了几件事但我无法找到我想要的解决方案。
我的表格如下:
username childs+pets childs pets
=======================================
Max 1 1
Nico 3 1 2
Lewis 2 2
Daniel 2 1 1
我想通过孩子+宠物(ASCending)订购我的桌子,但是我想把带有空字段的记录(Max和Lewis)放在桌子的底部。结果如下:
username childs+pets childs pets
=======================================
Nico 3 1 2
Daniel 2 1 1
Lewis 2 2
Max 1 1
谁能帮帮我?
答案 0 :(得分:0)
样本不够清晰,因此请选择以下两种方法之一:
select *
from t
order by "childs+pets" + 0 desc
,case when childs = '' then 2 else 1 end
,case when pets = '' then 2 else 1 end
;
select *
from t
order by case when childs = '' then 2 else 1 end
,case when pets = '' then 2 else 1 end
,"childs+pets" + 0 desc
;
答案 1 :(得分:0)
最简单的解决方案(适用于Null值)只是:
select *
from mytable
order by coalesce(childs+pets, 9999)
或者,正如您所说的空值为零字符串,您也可以使用:
select *
from mytable
order by case when childs = '' or pets = '' then '9999' else childs+pets end
答案 2 :(得分:0)
这是一个适用于SQL Server的解决方案。我还假设Childs + Pets是来自两个不同领域的计算字段。
测试数据;
CREATE TABLE #TestData (Username nvarchar(10), Childs int, Pets int)
INSERT INTO #TestData (Username, Childs, Pets)
VALUES
('Max',NULL,1)
,('Nico', 1,2)
,('Lewis',2,NULL)
,('Daniel',1,1)
查询
SELECT
td.Username
,COALESCE(td.Childs,0) + COALESCE(td.Pets,0) Childs_Pets --The coalesce returns a Zero if the field contains a NULL
,td.Childs
,td.Pets
FROM #TestData td
ORDER BY CASE WHEN td.Childs IS NULL OR td.Pets IS NULL THEN 0 ELSE 1 END DESC
,COALESCE(td.Childs,0) + COALESCE(td.Pets,0) ASC
输出
Username Childs_Pets Childs Pets
Daniel 2 1 1
Nico 3 1 2
Max 1 NULL 1
Lewis 2 2 NULL
CASE
语句首先被排序,因此如果Childs
或Pets
中的任何内容都有NULL值,那么它将被推到底部。 Childs_Pets
的排序随后排序ASC
并按您的意愿排序。