按组计算总计

时间:2014-01-15 16:39:25

标签: sql sql-server reporting

我是SQL的新手,并且只使用了大约4个月。但是我需要构建一个可以计算相似项目总数的存储过程(使用数字标识符,即计算总数E.ThisNumber Where E.ThatNumber = 'Whatever'

这是我到目前为止检索我需要的记录的代码:

SELECT *
FROM BarRevenueByProcedurePriceInfo
WHERE DeptID = '010.4730'
AND SegmentDateTime = '2013-11-30 00:00:00.000'
ORDER BY ProcedureID

这是输出:

                           ProcedureID/
RowUpdateTime   Dept Code  E.ThatNumber  E.ThisNumber  E.WhatIneed

2013-11-30      010.4730    4200028      108.15       108.15
2013-11-30      010.4730    4200028       18.18       126.33
2013-11-30      010.4730    4200028       63.63       189.81
2013-11-30      010.4730    4200069        5.00         5.00
2013-11-30      010.4730    4200069        5.01        10.01
2013-11-30      010.4730    4200069        6.00        16.01

注意当E.ThatNumber值与前一个条目不同时,计数如何重置。任何帮助将不胜感激。谢谢!

威廉哈利

2 个答案:

答案 0 :(得分:0)

不是100%确定你需要什么,可能是这样:

SELECT *,
       SUM(ThisNumber) OVER (PARTITION BY ProcedureID)
FROM BarRevenueByProcedurePriceInfo
WHERE DeptID = '010.4730'
AND SegmentDateTime = '2013-11-30 00:00:00.000'
ORDER BY ProcedureID

答案 1 :(得分:0)

SQL Server 2012支持累积总和:

SELECT *,
       sum(thisnumber) over (partition by procedureId order by (select NULL)) as whatIneed
FROM BarRevenueByProcedurePriceInfo
WHERE DeptID = '010.4730' AND
      SegmentDateTime = '2013-11-30 00:00:00.000'
ORDER BY ProcedureID;

在早期版本中,您需要使用相关子查询或加入聚合。

顺便说一句,行没有明显的排序。如果您正在进行累计求和,那么您应该有一个指定订单的列。