在SQL中计算运行价值的最有效方法

时间:2011-10-26 14:49:51

标签: sql common-table-expression

  

可能重复:
  Calculate a Running Total in SqlServer

考虑这个数据

     Day | OrderCount
       1       3
       2       2 
       3       11
       4       3
       5       6

如何使用T-SQL查询获得OrderCount(运行值)结果集的累积

      Day | OrderCount | OrderCountRunningValue
       1        3            3
       2        2            5
       3        11           16
       4        3            19
       5        6            25

我可以通过在实际查询中循环(使用#table)或在我的C#代码隐藏中轻松完成此操作但是它很慢(考虑到我每天也获得订单)当我处理数千条记录时所以我正在寻找为了更好/更有效的方法,希望没有循环,比如递归CTE或其他东西。

任何想法都会非常感激。 TIA

4 个答案:

答案 0 :(得分:2)

SELECT t.Day, 
       t.OrderCount, 
       (SELECT SUM(t1.OrderCount) FROM table t1 WHERE t1.Day <= t.Day) 
         AS OrderCountRunningValue
FROM table t

答案 1 :(得分:2)

由于您似乎需要在客户端中使用这些结果而不是在另一个SQL查询中使用,所以最好不要在SQL中执行此操作。

(我的评论中的链接问题显示SQL中的“最佳”选项,如果这是必要的话。)


建议将Day和OrderCount值作为一个结果集(SELECT day, orderCount FROM yourTable ORDER BY day)拉出,然后计算C#中的运行总计。

您的C#代码将能够有效地遍历数据集,并且几乎肯定会超越SQL方法。这样做的目的是将一些负载从SQL Server传输到Web服务器,但总体上(并且显着)节省了资源。

答案 2 :(得分:1)

SELECT 
  t.day, 
  t.orderCount, 
  SUM(t1.orderCount) orderCountRunningValue
FROM 
  table t INNER JOIN table t1 ON t1.day <= t.day
group by t.day,t.orderCount

答案 3 :(得分:0)