首页 > 解决方案 > 如何将 1 添加到存储过程中插入语句的列值?

问题描述

我有一个每小时更新一次的表(RPT.SummaryAggregates)。我需要创建一个存储过程,每周一次用(RPT.SummaryAggregates)中的总记录的快照填充表(RPT.WeeklyAggregates)(此SP 将使用SQL 代理作业设置)。每次运行存储过程时,我需要 (RPT.WeeklyAggregates) 的 Week 列自动递增 1。目前表中有一周的数据。

存储过程当前如下所示:

INSERT INTO RPT.WeeklyAggregates                      
SELECT 
    1 AS Week,                                                                                      
    SUM(BX),
    SUM(BK),
    SUM(MN),
    SUM(QN),
    SUM(SI),
    SUM(CF),
    (SUM(BX)+SUM(BK)+SUM(MN)+SUM(QN)+SUM(SI)+SUM(CF)) as Total                  
FROM RPT.SummaryAggregates

END;

表格列是周、BX、BK、MN、QN、SI、CF、总计。

标签: sqlstored-proceduressql-insertauto-increment

解决方案


如果我正确地跟随你,你想要:

INSERT INTO RPT.WeeklyAggregates(Week, BX, BK, MN, QN, SI, CF, Total)
SELECT 
    (SELECT COALESCE(MAX(Week), 0) + 1 FROM WeeklyAggregates),
    SUM(BX), 
    SUM(BK), 
    SUM(MN), 
    SUM(QN), 
    SUM(SI), 
    SUM(CF), 
    SUM(BX)+SUM(BK)+SUM(MN)+SUM(QN)+SUM(SI)+SUM(CF)
FROM RPT.SummaryAggregates

子查询从目标表中检索最大值Week,并将其递增;COALESCE()处理表最初为空的情况(在这种情况下1被插入)。


推荐阅读