考虑这个数据
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
答案 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)