如何根据参数求和x表列的数量?

时间:2018-07-05 14:53:22

标签: sql loops tsql sql-server-2012

假设我有{13列的budget表-accountperiod01period12

如果我想创建一个存储过程,该存储过程将通过periodX(其中X作为参数传递)返回period01的总和,我将如何去做?

在VBA中,我通过创建一个简单的字符串解析器解决了这个问题,该解析器将为我构建SQL命令。但是,我正在尝试删掉该层,并从数据库级别的存储过程中进行所有操作。除了字符串解析和CASE语句之外,还有其他更好的方法吗?

1 个答案:

答案 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;

您不必将其设置为存储过程。您可以使它成为用户定义的表函数。