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

时间:2017-10-11 13:13:32

标签: sql tsql group-by rollup

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

2 个答案:

答案 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;

这可以确保排序以升序排列,空值在底部。