【问题标题】:How to sort NULL values last - for grouping summary rows with "group by rollup/cube"如何最后对 NULL 值进行排序 - 使用“按汇总/多维数据集分组”对汇总行进行分组
【发布时间】:2018-03-23 04:26:00
【问题描述】:

使用GROUP BY ... WITH ROLLUP 时,小计/总计行由分组列中的NULL 值指示。这是一个不错的功能,但我希望总数低于明细值,但 NULLs 会在开头进行排序。

例子:

SELECT Year, Quarter, SUM(Amount) AS Amount
FROM Table
GROUP BY Year, Quarter WITH ROLLUP
ORDER BY Year, Quarter

Year|Quarter|Amount            Year|Quarter|Amount
----|-------|------    --->    ----|-------|------
NULL|   NULL|   120            1999|      1|    10
1999|   NULL|    40            1999|      2|    10
1999|      1|    10            1999|      3|    10
1999|      2|    10            1999|      4|    10
1999|      3|    10            1999|   NULL|    40
1999|      4|    10            2000|      1|    20
2000|   NULL|    80            2000|      2|    20
2000|      1|    20            2000|      3|    20
2000|      2|    20            2000|      4|    20
2000|      3|    20            2000|   NULL|    80
2000|      4|    20            NULL|   NULL|   120

最后如何获得?

我知道我可以将 NULL 值替换为按预期排序的值,可能在其他列中,但这是一个糟糕的解决方法。

【问题讨论】:

  • 编辑问题以添加样本数据和所需的输出,这有助于得出解决方案。
  • 另一种解决方案,是先对 NULL 值进行排序,然后再休息。
  • @YogeshSharma 添加了示例,很好的建议。但我不明白你的替代​​解决方案。你能解释一下吗?

标签: sql tsql group-by rollup


【解决方案1】:

只是改变

ORDER BY Year, Quarter

ORDER BY GROUPING(Year), Year, GROUPING(Quarter), Quarter

说明:此函数返回总行数为 1,其他所有行数为 0。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,发现底部的空值的方法是:

    SELECT Year, Quarter, SUM(Amount) AS Amount
    FROM Table
      GROUP BY ROLLUP (Year, Quarter)
      ORDER BY Year ASC NULLS LAST, Quarter ASC NULLS LAST;
    

    这确保排序将按升序排列,空值位于底部。

    【讨论】:

    • 这不是问题已标记的 T-sql (SQl-server)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多