【问题标题】:SQL Running total grouped by ID按 ID 分组的 SQL 运行总计
【发布时间】:2017-12-12 18:26:44
【问题描述】:

使用此查询,我需要在NULL 列中填充每一行的运行总计,该行对应于当前表的日历年、年初至今的支付金额。此运行总计应按member_id 分组。

SELECT id=identity(int,1,1), cast(null as numeric(22,3)) as max_running_total, *
INTO #temp
FROM Customer_DB..Sales_Table
ORDER BY Date_Column asc

UPDATE #temp
SET max_running_total = (SELECT SUM(paid_amount)
                         FROM #temp
                         WHERE id <= id
                         GROUP BY member_id)

【问题讨论】:

  • 你的表结构在哪里?
  • 您使用的是什么版本的 SQL Server? 2012+,还是 2008R2(或之前)?
  • 对此感到抱歉。 SQL server 2008。我选择的表是大约 200,000 行交易数据,例如paid_amount、销售税、日期、member_id、会员名称等...

标签: sql sql-server sql-server-2008


【解决方案1】:

由于您没有给出架构,因此我采用了示例架构并尝试了滚动总和。您可以使用相同的sql windows函数并实现您的结果

CREATE TABLE amt 
  ( 
     id            INT, 
     paid_amount   DECIMAL, 
     running_total DECIMAL 
  ) 

insert INTO amt VALUES (1, 100, NULL), (2, 50, NULL), (3, 50, NULL) 

SELECT id, paid_amount, 
 SUM(paid_amount) over(ORDER BY id ROWS BETWEEN unbounded preceding AND CURRENT ROW) AS running_total 
FROM amt

【讨论】:

  • 窗口函数仅适用于 SQL Sever 2012 及更高版本。
  • 这个功能在 2008 年可用吗?它也没有考虑member_id。我需要每个成员的运行总计,它显示该成员已支付了多少,YTD。
猜你喜欢
  • 2021-10-01
  • 2019-10-27
  • 2014-04-05
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
相关资源
最近更新 更多