【问题标题】:SQL SELECT Ordering columns with Null Values具有空值的 SQL SELECT 排序列
【发布时间】:2011-07-26 10:36:52
【问题描述】:

我的问题与此类似: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 社区。

【问题讨论】:

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


【解决方案1】:

希望能帮助到别人, 我只是想补充一点,我有一个类似的问题,使用 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 排序,但最后是零

【讨论】:

    【解决方案2】:

    你也可以使用 isnull:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-09-27
        • 1970-01-01
        • 1970-01-01
        • 2016-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-06
        • 1970-01-01
        相关资源
        最近更新 更多