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

问题描述 投票:1回答:2

使用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值,但这是一个糟糕的解决方法。

sql tsql group-by rollup
2个回答
0
投票

只是改变

ORDER BY Year, Quarter

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

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


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;

这可以确保排序按升序排列,底部为空。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.