使用GROUP BY ... WITH ROLLUP
时,小计/总行数由分组列中的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
值,但这是一个不好的解决方法。
答案 0 :(得分:0)
只需更改
ORDER BY Year, Quarter
到
ORDER BY GROUPING(Year), Year, GROUPING(Quarter), Quarter
说明:此函数返回1表示总行数,0表示所有其他行。
答案 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;
这可以确保排序以升序排列,空值在底部。