对sql中的相邻列求和

对sql中的相邻列求和,sql,sql-server-2012,sum,Sql,Sql Server 2012,Sum,我要求一个没有函数或过程的解决方案(权限问题) 我有一张这样的桌子: col1 col2 col3 col4 col5 ... col(k) 10 30 60 10 70 X 其中k=列数(实际上:k=500) 我需要创建一个计算行,如下所示: col1 col2 col3 col4 col5 ... col(k) 10 30 60 10 70 X 在Excel中,创建一个forumla并拖动它是一件简单

我要求一个没有函数或过程的解决方案(权限问题)

我有一张这样的桌子:

col1 col2  col3 col4 col5  ...  col(k)
10    30    60   10   70          X
其中k=列数(实际上:k=500)

我需要创建一个计算行,如下所示:

col1 col2  col3 col4 col5  ...  col(k)
10    30    60   10   70          X
在Excel中,创建一个forumla并拖动它是一件简单的事情,但在sql中,如果我有很多列,手动添加(col1作为col1,col1+col2作为col2,col1+col2+col3作为col3直到colk等)似乎是一件非常笨拙的工作

有没有办法找到解决这个问题的好办法?

如果很多报告都需要/使用这个“colk”,我建议您创建一个计算列或视图,使用k=cola+colb+对所有列求和


sql中没有对列进行汇总的函数(例如colA和colJ之间)

您说您已经将数据模型更改为行。假设新表有三列:

  • grp(一些组键,用于标识哪些行属于一起,即旧表中的一行是什么)
  • pos(从1到500的位置号,用于指示值的顺序)
  • 价值观
您可以通过
总和超过
得到累计总和:

select grp, pos, value, sum(value) over (partition by grp order by pos) as running_total
from mytable
order by grp, pos;

这看起来像是一个糟糕的数据模型。对于这个模型,您提出的解决方案是正确的方法。最好是更改数据模型,这样就可以使用行而不是列。然后你只需使用
求和
就可以了:-)这是有原因的-我更容易对这些数据进行特定的qa。好的。那么,您展示的解决方案就是前进的道路。不过,这需要大量的打字。因此,您可能希望使用一些程序生成查询。不过,我必须承认,我不理解你的模型。为什么是500列?我可以想象一张12个月12列的桌子,或者4个霍格沃茨塔4列的桌子,但什么东西有500个零件呢?我仍然认为您应该更改此数据模型,这样一般来说,查询很容易编写。我已将数据模型更改为行。有没有什么好主意可以引起一场争吵?@Jordan1200。你应该问一个新问题,包括样本数据和期望的结果。