首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL RunningTotal

SQL RunningTotal
EN

Stack Overflow用户
提问于 2017-04-25 07:45:02
回答 1查看 32关注 0票数 0

我需要用Running Summary更新一个表。对于每个BusinessId,都有CalDate,并且没有标识列。此表将用于报告,并将每周截断和刷新。所以不确定创建identity col是否是一个好主意。该查询适用于第一个业务,但一旦业务发生变化,它就会变得一团糟。因此,请建议查询是不同的,还是应该有标识列。以下是示例代码:

代码语言:javascript
复制
    create table #Summary(
BusinessID int not null,
CalDate Date,
[ColA] [decimal](18, 4) NULL,
[ColB] [decimal](18, 4) NULL,
[ColC] [decimal](18, 4) NULL,
COLA_COLB_RunningSummary [decimal](18, 4) NULL,
COLA_COLC_RunningSummary [decimal](18, 4) NULL

)

INSERT INTO #Summary (BusinessID,CalDate,[ColA],[ColB] ,[ColC] ) VALUES
(111, '2017-4-09', 17583.0000,  4.5301, 17717.0000)
INSERT INTO #Summary (BusinessID,CalDate,[ColA],[ColB] ,[ColC] ) VALUES
(111, '2017-4-10', 19979.0000,  12.3079 ,20282.0000)
INSERT INTO #Summary (BusinessID,CalDate,[ColA],[ColB] ,[ColC] ) VALUES
(111, '2017-4-11', 19475.0000,  4.1483  ,19726.0000)
INSERT INTO #Summary (BusinessID,CalDate,[ColA],[ColB] ,[ColC] ) VALUES
(222, '2017-4-09', 17583.0000,  6.9404, 17717.0000)
INSERT INTO #Summary (BusinessID,CalDate,[ColA],[ColB] ,[ColC] ) VALUES
(222, '2017-4-10', 14692.0000,  6.5387, 14840.0000)
INSERT INTO #Summary (BusinessID,CalDate,[ColA],[ColB] ,[ColC] ) VALUES
(222, '2017-4-11', 17727.0000,  10.7649 ,17977.0000)
INSERT INTO #Summary (BusinessID,CalDate,[ColA],[ColB] ,[ColC] ) VALUES
(333, '2017-4-09', 10731.0000,  7.3412, 10821.0000)
INSERT INTO #Summary (BusinessID,CalDate,[ColA],[ColB] ,[ColC] ) VALUES
(333, '2017-4-10', 7571.0000,   6.9404, 7660.0000)
INSERT INTO #Summary (BusinessID,CalDate,[ColA],[ColB] ,[ColC] ) VALUES
(333, '2017-4-11', 14692.0000,  6.5387, 14840.0000)

select * from #Summary

select BusinessID,CalDate,[ColA], [ColB], 
Sum([ColA] * [ColB]) OVER (order by BusinessID, Caldate rows unbounded preceding)  as COLA_COLB_RunningSummary
from #Summary
EN

回答 1

Stack Overflow用户

发布于 2017-04-25 07:47:48

我想你是在找partition by

代码语言:javascript
复制
select BusinessID,CalDate,[ColA], [ColB], 
       Sum([ColA] * [ColB]) OVER (partition by BusinessID
                                  order by Caldate
                                 ) as COLA_COLB_RunningSummary
from #Summary;

这将重新启动每项业务的累计总和。

如果您想更新表,只需使用可更新的CTE:

代码语言:javascript
复制
with toupdate as (
      select s.*, 
             Sum([ColA] * [ColB]) OVER (partition by BusinessID
                                        order by Caldate
                                       ) as new_COLA_COLB_RunningSummary
             Sum([ColA] * [ColC]) OVER (partition by BusinessID
                                        order by Caldate
                                       ) as new_COLA_COLC_RunningSummary
      from #Summary s
     )
update toupdate
    set COLA_COLB_RunningSummary = new_COLA_COLB_RunningSummary,
        COLA_COLC_RunningSummary = new_COLA_COLC_RunningSummary;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43599338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档