SQL表ORDER BY(底部的空字段)

时间:2016-11-15 09:25:23

标签: sql isnullorempty sql-order-by

我对订购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

谁能帮帮我?

3 个答案:

答案 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语句首先被排序,因此如果ChildsPets中的任何内容都有NULL值,那么它将被推到底部。 Childs_Pets的排序随后排序ASC并按您的意愿排序。