次の表があります。各行には、示された列全体にわたる一連の値が格納されます。SQL Server 2005の現在の月に応じた列の合計を見つける
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)
.
.
.
私は何をしたい(最初のカラム(月)現在の月を表す列までを含むからの値を合計し、行ごとに、年の月に応じて、8月です例えば)。私はおそらくこれがパラメータとして月を取る何らかの種類の関数を含むと思われる。もちろん、何千もの行があり、すべての行が一意ではありません。
これをどこから始めるべきか、またはこれに使用するSQL組み込みの関数/キーワードはどこから始めるのかよくわかりません。誰かが私に正しい方向を向けることができるだろうか?
UPDATE:アンドリー・Mのソリューションに基づいて
、私はこれを思い付きました。
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
マトリックス表にしている代わりに0の1者で満たされた左下半分(列名が「P」、この場合、arbitryプレフィックスで始まり、そして数が続く)を有する恒等行列です。最後に追加の列が追加され、各行が識別されます。行列テーブルは、十分に大きなものであれば、今後も他の問題にも役立ちます。
このテーブルのPKとは何ですか?また、スキーマを変更することはできますか? –
はい、私はスキーマを変更することはできません。自動増分されたPKを含めることができます。それは問題ではありません。 – deutschZuid