Как можно суммировать x количество столбцов таблицы на основе параметра? - PullRequest
0 голосов
/ 05 июля 2018

Допустим, у меня есть таблица budget с 13 столбцами - от account и period01 до period12.

Если бы я хотел создать хранимую процедуру, которая бы возвращала сумму от периода 01 до периода X (где X передается в качестве параметра), как бы я поступил так?

В VBA я решил эту проблему, создав простой синтаксический анализатор строк, который собрал бы команду SQL для меня. Тем не менее, я пытаюсь вырезать этот слой и сделать все это из хранимой процедуры на уровне базы данных. Есть ли более оптимальный способ сделать это, кроме анализа строк и операторов CASE?

1 Ответ

0 голосов
/ 05 июля 2018

Вот почему вы не должны хранить столбцы с такими поворотами. Было бы намного проще справиться с этим, если бы каждый столбец «period» находился в отдельной строке.

Для начала, вот запрос, который делает то, что вы хотите:

select b.*, @x, running.periodsum
from budget b outer apply
     (select sum(v.period) as periodsum
      from (values (1, b.period1), (2, b.period2), . . . (12, b.period12)) v(n, period)
      where v.n <= @x
     ) running;

И вам не нужно делать это хранимой процедурой. Вы можете сделать это пользовательской табличной функцией.

...