sql join使用列名和列名派生

时间:2013-09-21 16:45:53

标签: sql sql-server-2008

表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 ......等)

非常感谢。

1 个答案:

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

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