按 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 运行总计的主要内容,如果未能解决你的问题,请参考以下文章