2012-09-19 28 views

回答

17

可以工作吗?

SELECT ....... ORDER BY COALESCE(col1,col2,col3,etc) IS NULL 

我有点困惑你的措辞“所有NULL列最后”。如果你想最后在一个特定的列中的所有NULL值,使用:

SELECT ....... ORDER BY col1 IS NULL 
+0

不要你的意思'IS NOT NULL'? – dan04

+0

@ dan04 thx,你是对的 – mvds

+3

我认为它应该是'IS NULL'来得到最后的空值:) – Blorgbeard

4

你可以做这样的事情伪造它:

select * from test 
order by case ordercol when null then 1 else 0 end, ordercol 
+0

为什么'order by case ordercoll为null then 0 else 1,ordercol'?当某人在ordercol中将值设置为低于-100时,会保存一个奇怪的错误。 – mvds

+0

这是一个很好的观点。我只是写了一个模糊的例子,因为我们不知道数据是什么样的。但是你的修正在一般情况下效果更好 - 应用它! – Blorgbeard

15

虽然我有点像Blorgbeard的答案,这个变体没有按”不关心提供正确数据类型的有效“假”值。

ORDER BY CASE WHEN SOMECOL IS NULL THEN 1 ELSE 0 END, SOMECOL 

另外,即使你想使用假的价值,我宁愿ISNULL!

ORDER BY ISNULL(SOMECOL,-9999) 

正如Michael指出的,SQLite使用IFNULL。您也可以使用ANSI-SQL通用版COALESCE

+0

小问题我认为......在SQLite中,ISNULL应该是IFNULL。 – Michael

+0

谢谢@Michael,更新了更好的信息 – RichardTheKiwi

2

我遇到了同样的问题。 我发现这可能是工作:

(我没有找到任何的SQLite功能isnull

order by ifnull(column_what_you_want_to_sort,'value in case of null') 
相关问题