使用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
值,但这是一个糟糕的解决方法。
只是改变
ORDER BY Year, Quarter
至
ORDER BY GROUPING(Year), Year, GROUPING(Quarter), Quarter
说明:此函数对总行返回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;
这可以确保排序按升序排列,底部为空。