首页 > 解决方案 > SQL 中没有总计的 ORDER BY

问题描述

我有这个 SQL 查询,它用于ROLLUP获取总数,但还需要按数量对每隔一行进行排序:

SELECT 
    ISNULL([SharepointId], 'Total') as 'Sharepoint', 
    Count([Id]) as 'Nombre de tickets' 
FROM [dbo].[Tickets]
GROUP BY ROLLUP([SharepointId])
ORDER BY 2 DESC, 1

有没有办法确保总数保持在结果的末尾,同时保持其他行的降序?

现在,这就是我得到的:

Sharepoint         Nombre de tickets
------------------ -----------------
Total              20326
INTERNE            9396
MAIN               1503
...

标签: sqlsql-servergroup-bysql-order-byrollup

解决方案


其他答案错误地代表了您想要的内容。

  • 你不希望最后一行因为它是 NULL
  • 您希望一行位于最后,因为它已被分组


SQL Server 正好有一个功能,文档页面几乎完全有你的例子......


SELECT 
    ISNULL([SharepointId], 'Total') as 'Sharepoint', 
    Count([Id]) as 'Nombre de tickets' 
FROM [dbo].[Tickets]
GROUP BY ROLLUP([SharepointId])
ORDER BY GROUPING([SharepointId]), 2 DESC

GROUPING([SharepointId])0当列分组时(因此这些行首先排序),然后是1列分组时(因此该行排在最后)。这在汇总多列时特别有用。


推荐阅读