假设我有{13列的budget
表-account
和period01
至period12
。
如果我想创建一个存储过程,该存储过程将通过periodX(其中X作为参数传递)返回period01的总和,我将如何去做?
在VBA中,我通过创建一个简单的字符串解析器解决了这个问题,该解析器将为我构建SQL命令。但是,我正在尝试删掉该层,并从数据库级别的存储过程中进行所有操作。除了字符串解析和CASE语句之外,还有其他更好的方法吗?
答案 0 :(得分:5)
这就是为什么您不应该存储像这样旋转的列的原因。如果每个“期间”列都位于单独的行上,则处理起来会容易得多。
为使您入门,这是一个查询,可以满足您的需求:
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;
您不必将其设置为存储过程。您可以使它成为用户定义的表函数。