按 ID 分组的 SQL 运行总计

Posted

技术标签:

【中文标题】按 ID 分组的 SQL 运行总计【英文标题】:SQL Running total grouped by ID 【发布时间】: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、会员名称等... 【参考方案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。

以上是关于按 ID 分组的 SQL 运行总计的主要内容,如果未能解决你的问题,请参考以下文章

按SQL Server中的总计百分比分组

Oracle分组小计总计示例(grouping sets的使用)

按表中的分组记录运行总计

SQL如何对分组后的结果进行排序并且取前几名

按月、年分组的数据集运行总计

SQL对“图书”表创建一个分组总计查询,统计不同出版社出版的图书数量,显示“?