表A列[9](数字类型)
表B有列[10],[11],[12] ......(还有更多列,但我一次需要2列)(所有数字类型)
在结果表中我需要结合A. [月] +(B。[月+ 1] * B. [月+ 2])
示例:
Table A
Person/ 9
Joe 50
Table B
Person/ 10/ 11/ 12/ 13 ...
Mary 3 4 5 44
Joe 6 5 1 11
结果:
Person Calc
Joe 50 + (6*5)=50+30=80
对于在两个表中找到的每个人,计算是: 表格A +中第x列的值(表格B中列x + 1上的值*表格B上列x + 2上的值)
这样做最好怎么办?
考虑到我在Sql中所知道的,应该修复列名,而我需要通过派生名称引用列(月份+ 1,月份+ 2 ......等)
非常感谢。
答案 0 :(得分:0)
您可以使用动态sql构建一个语句,然后使用EXECUTE SP_EXECUTESQL
执行该语句,如下所示:
DECLARE @month INT
SET @month = 9
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT a.person, a.[' + CAST(@month AS VARCHAR)+'] + (b.[' + CAST(@month+1 AS VARCHAR) +'] * b.[' + CAST(@month+2 AS VARCHAR) + ']) AS Calc FROM TableA a INNER JOIN TableB b ON a.person = b.person'
--PRINT @sql -- uncomment this line to see the statement that will be executed
--EXEC SP_EXECUTESQL @sql -- uncomment this to execute the statement
上面的代码应该很容易变成一个以month
作为变量的存储过程。演员阵容等也很可能会得到改善;这是快速而肮脏的版本......
正如评论中所指出的,如果可能的话,更好的解决方案可能是改变数据库的模式。