SQL SELECT使用Null值排序列

时间:2011-03-30 21:21:53

标签: sql-server sorting select null sql-order-by

我的问题与此类似:How to display a table order by code (like 01, 02… then null columns)?,但对于SQL Server。

简而言之,我有一个SELECT语句,它返回以下内容:

ColumnA ColumnB
X       NULL
Y       1
Z       2

..由ColumnB完成排序。

我们如何强制(columnB = NULL)类型的行到底部?即,预期的结果是:

ColumnA ColumnB
Y       1
Z       2
X       NULL

谢谢SOF社区。

3 个答案:

答案 0 :(得分:23)

...或者为了避免价值冲突......

SELECT 
   ColumnA, 
   ColumnB
FROM YourTable
ORDER BY 
   CASE WHEN ColumnB IS NULL THEN 1 ELSE 0 END ASC,
   ColumnB

答案 1 :(得分:2)

您也可以使用isnull:

select * from thetable order by isnull(columnb, 99999)

isnull将使用您提供给它的值替换null,因此在这种情况下,如果该列为null,则将其替换为99999.您可以将该值设置为某个大数字,因此它将位于底部订单。

答案 2 :(得分:0)

希望能帮助别人, 我只是想补充说我有一个类似的问题,使用row_number和分区 - 当它为零时把它放在最后 我使用下面的脚本(部分视图):

   ,T.MONTHS_TO_AUTOGROWTH
   ,the_closest_event=ROW_NUMBER() OVER (PARTITION BY SERVERID, DRIVE ORDER BY 
                                      CASE WHEN MONTHS_TO_AUTOGROWTH > 0 THEN MONTHS_TO_AUTOGROWTH ELSE 9999 
                                      END ) 

结果按MONTHS_TO_AUTOGROWTH排序,但零结束