SQL累积计数
我有一张部门的桌子。我需要数一数哪个部门有多少人。这很容易做到SQL累积计数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张部门的桌子。我需要数一数哪个部门有多少人。这很容易做到 SELECT DEPT, COUNT(*) as 'Total' FROM SR GROUP BY DEPT; 现在我还需要做如下累积计数: 我找到了一些SQL来计算运行总数,但不是像这样的情况。在这种情况下,您能给我一些建议吗?我认为您可以使用一些临时/变量表,并使用以下解决方案: 还有其他一些解决方案,但我认为这是SQL Server 2008最快的解决方案。这里有一种使用CTE而不是光标的方法:
SELECT DEPT,
COUNT(*) as 'Total'
FROM SR
GROUP BY DEPT;
现在我还需要做如下累积计数:
我找到了一些SQL来计算运行总数,但不是像这样的情况。在这种情况下,您能给我一些建议吗?我认为您可以使用一些临时/变量表,并使用以下解决方案:
还有其他一些解决方案,但我认为这是SQL Server 2008最快的解决方案。这里有一种使用CTE而不是光标的方法:
WITH Base AS
(
SELECT ROW_NUMBER() OVER (ORDER BY [Count] DESC) RowNum,
[Dept],
[Count]
FROM SR
)
SELECT SR.Dept, SR.Count, SUM(SR2.[Count]) Total
FROM Base SR
INNER JOIN Base SR2
ON SR2.RowNum <= SR.RowNum
GROUP BY SR.Dept, SR.Count
ORDER BY SR.[Count] DESC
请注意,这是按递减计数排序,就像示例结果一样。如果有其他列没有显示,应该用于排序,只需替换每个ORDERBY子句中的Count
你们能为你们的表添加模式吗?或者你们有主键吗?我猜在你们输入问题时,这个线程并没有提供给你们。顺便说一句,我的google搜索字符串是,sql server运行总计。@Dhaval-由于数据正在通过SCD进行历史记录,因此没有PK或行号。如果您不知道术语“运行总计”,您可以很好地搜索sql server累积计数,这也会给您很多建议。@ypercube是一篇不错的文章,谢谢,但实际上,在本文中,游标方法比CTE慢2倍,但它的I/O操作更少是的,对,我看错了图片。在我的记忆中,我确信情况正好相反。也许我放弃了CTE方法,因为它需要通过临时表和标识获得的连续数字。再次链接到这些评论中讨论的文章:@ypercube是的,cte的代码比光标少一点,但它需要数字/其他键,而不需要空格。这非常适合我的需要。是否有可能在累积计数旁边轻松添加另一个派生列,该列将计算每行的累积计数/总和[每行所有部门]?在累积计数/254的意义上。结果应该显示为百分比。完成,我自己找到。再次感谢,谢谢你的帮助!
WITH Base AS
(
SELECT ROW_NUMBER() OVER (ORDER BY [Count] DESC) RowNum,
[Dept],
[Count]
FROM SR
)
SELECT SR.Dept, SR.Count, SUM(SR2.[Count]) Total
FROM Base SR
INNER JOIN Base SR2
ON SR2.RowNum <= SR.RowNum
GROUP BY SR.Dept, SR.Count
ORDER BY SR.[Count] DESC