【发布时间】:2011-02-28 22:17:47
【问题描述】:
我有 2 张桌子:
表1
id someval someatt
-------------------
1 23 name1
2 56 name2
3 76 name3
4 456 name4
5 53 name5
6 67 name6
7 12 name7
8 43 name8
9 99 name9
10 567 name10
表2
id someval someatt
-------------------
1 23.3 name1
2 5.6 name2
3 8.76 name3
4 4.56 name4
5 5.3 name5
6 6.7 name6
7 1.2 name7
8 4.3 name8
9 9.9 name9
10 56.7 name10
我需要在一个新表中插入两个表的各个字段的一些操作,例如
iteration1
x = get value from table1 where id 1
y = get value from table1 where id 2
a = get value from table2 where id 1
b = get value from table2 where id 2
iteration2
r = get value from table1 where id 2
s = get value from table1 where id 3
u = get value from table2 where id 2
v = get value from table2 where id 3
iterationn.
q = get value from table1 where id n-1
p = get value from table1 where id n
o = get value from table2 where id n-1
e = get value from table2 where id n
然后插入NEWTABLE
(a*b + x+y), (r*s + u*v) ...(q*p+o*e)
所以我在想(如果我必须这样做 100 次):
SET @counter = 1;
SET @template = '';
SET @N = 100;
WHILE(@counter < @N)
Select @x = value from table 1 where id = @counter
Select @y = value from table 1 where id = @counter + 1
Select @a = value from table 2 where id = @counter
Select @b = value from table 2 where id = @counter + 1
@template = @template + ' (@x*@y + @a*@b), '
end
所以在循环结束时我有一个完整的模板
然后是EXEC(@template),
- 如何优化它?
- 如何执行我描述的操作? (table1 和 table2 是我的表的示例)
- 有没有办法 4选 避免陈述?
输出表:
result1 result2 result3 .... result100
---------------------------------------
float float float ... float
其中 float 是针对 table1 和 table2 中的每个值计算 (a*b + x+y) 的结果
【问题讨论】:
-
为什么要水平显示结果?应用程序比数据库层更好地处理。
-
好吧,原因是我会按照描述的方式插入结果,我会得到一个有 100 列和 n 行的表,其中一行按描述计算
-
您提供的代码只计算单行。你的意思是你会一遍又一遍地重复
EXEC(@template),直到你只剩下一个值? -
不是
EXEC(@template),模板将改变并从其他表中获取其他值并继续插入new table
标签: sql sql-server tsql