如何最后对 NULL 值进行排序 - 用于使用 "group by rollup/cube" 对汇总行进行分组

How to sort NULL values last - for grouping summary rows with "group by rollup/cube"

使用 GROUP BY ... WITH ROLLUP 时,subtotal/total 行由分组列中的 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 值替换为按预期排序的值,可能在其他列中,但这是一个糟糕的解决方法。

改变一下

ORDER BY Year, Quarter

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

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

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

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

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