【问题标题】:How to place NULLs last in ascending order如何将 NULL 按升序排列在最后
【发布时间】:2023-03-09 09:50:01
【问题描述】:

我需要对表格进行排序,并且需要在底部显示包含 Null 的行。每当我运行以下查询时

select * from t1 
order by status, date;

空值出现在我不想要的第一行:

+--------+------------+--+

| Status |    Date    |  |
+--------+------------+--+
|      1 | NULL       |  |
|      1 | 2011-12-01 |  |
|      1 | 2011-12-21 |  |
|      2 | NULL       |  |
|      2 | 2005-09-02 |  |
|      3 | 2000-08-07 |  |
|        |            |  |
+--------+------------+--+

这是我需要的:

+--------+------------+--+
| Status |    Date    |  |
+--------+------------+--+
|      1 | 2011-12-01 |  |
|      1 | 2011-12-21 |  |
|      1 | NULL       |  |
|      2 | 2005-09-02 |  |
|      2 | NULL       |  |
|      3 | 2000-08-07 |  |
|        |            |  |
+--------+------------+--+

我该怎么做?

【问题讨论】:

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


    【解决方案1】:
    select * from t1 
    order by status, 
             date, 
             CASE WHEN date is NULL 
                  THEN 1
                  ELSE 0
             END;
    

    【讨论】:

    • 一般来说,这是正确的答案,但我需要保留空值或某种空值,因为数字会影响统计分析的结果。
    • 也许为日期本身添加另一列?编辑:日期列已经在查询中,所以我没有看到问题。投赞成票!
    • 我不明白评论。我不删除任何 null 仅使用案例对其进行排序。这解决了您在问题中提供的示例
    【解决方案2】:

    这可行吗:order by col asc nulls last

    【讨论】:

    • sql server last 不支持空值
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 2020-06-19
    • 2016-08-04
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2023-01-05
    • 2014-07-31
    相关资源
    最近更新 更多