У меня есть следующая таблица. В каждой строке хранится ряд значений в указанных столбцах.
create table MonthlyData (
Jan int not null,
Feb int not null,
Mar int not null,
Apr int not null,
May int not null,
Jun int not null,
Jul int not null,
Aug int not null,
Sep int not null,
Oct int not null,
Nov int not null,
Dec int not null
)
insert into table (3, 1, 3, 4, 5, 6, 7, 8, 9, 4, 3, 2)
.
.
.
Что я хочу сделать, так это в зависимости от месяца года для каждой строки суммировать значения от первого столбца (январь) до столбца, представляющего текущий месяц (например, август), включая столбец. Я подозреваю, что это, вероятно, будет включать в себя какую-то функцию, которая принимает месяц в качестве параметра. Конечно, будут тысячи строк, и не каждый ряд будет уникальным.
Я не совсем уверен, с чего начать или какие встроенные функции / ключевые слова sql использовать для этого. Кто-нибудь сможет указать мне правильное направление?
UPDATE:
Основываясь на решении Андрея М, я придумал это.
declare @currentMonth int
set @currentMonth = 8
select sum(p1*Jan+p2*Feb+p3*Mar+p4*Apr+
p5*May+p6*Jun+p7*Jul+p8*Aug+
p9*Sep+p10*Oct+p11*Nov+p12*Dec) as 'Balance'
from MonthlyData md
cross join MatrixTable mt
where mt.period = @currentMonth
Таблица матриц представляет собой единичную матрицу с нижней левой половиной, заполненной цифрами 1 вместо 0 (имена столбцов начинаются с произвольного префикса, в данном случае «p», за которым следует число). В конце добавляется дополнительный столбец для идентификации каждой строки. Таблица матрицы будет полезна и для других задач в будущем, если она достаточно велика.