Как добавить 1 к значению столбца при вставке в оператор в хранимой процедуре? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть таблица, которая обновляется каждый час (RPT.SummaryAggregates). Мне нужно создать хранимую процедуру, которая заполняет таблицу (RPT.WeeklyAggregates) моментальным снимком всех записей в (RPT.SummaryAggregates) один раз в неделю (этот SP будет настроен с SQL заданием агента). Мне нужно, чтобы столбец Week (RPT.WeeklyAggregates) автоматически увеличивался на 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, Total.

1 Ответ

1 голос
/ 14 апреля 2020

Если я правильно следил за вами, вы хотите:

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 вставляется).

...