如何最后对 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
值表示。这是一个不错的功能,但我希望总计低于详细值,但 NULL
s 在开头排序。
示例:
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;
这确保排序将按升序排列,空值位于底部。
使用 GROUP BY ... WITH ROLLUP
时,subtotal/total 行由分组列中的 NULL
值表示。这是一个不错的功能,但我希望总计低于详细值,但 NULL
s 在开头排序。
示例:
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;
这确保排序将按升序排列,空值位于底部。