0

表 A 有第 [9] 列(数字类型)

表 B 有列 [10],[11],[12]... (还有更多列,但我一次需要 2 个)(全部为数字类型)

在表 RESULT 中,我需要结合 A.[month] + (B.[month+1] * B.[month+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...等)引用列

非常感谢。

4

1 回答 1

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变量为参数的存储过程。演员阵容等也很可能得到改善;这是快速而肮脏的版本...

正如评论中所指出的,如果可能的话,一个更好的解决方案可能是改变数据库的模式。

于 2013-09-21T18:33:58.697 回答