关于计算的问题(100分)

  • 主题发起人 主题发起人 boy2002
  • 开始时间 开始时间
B

boy2002

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是sqlserver2000,有两表:table1和table2,
table1的数据和字段(f1和f2)如下:
f1 f2
A1 field1+field2
A2 field1*field2

table2的数据和字段(field0,field1,field2,field1和field2是float型,而field0是
varchar型)如下:

field0 field1 field2
A1 2 3
A2 4 5

table1是公式表,而table2是数据表,根据table2的field0与table1的f1的数据相等,来
计算出数据来,比如table2变为:
field0 field1 field2 total
A1 2 3 5
A2 4 5 20

如何写这个sql语句?

 
f2只有+-*/ 就可以了
select a.field0,a.field1,a.field2,
case when b.f2='*' then a.field1*a.field2
when b.f2='+' then a.field1+a.field2
.......
else 0 end
from a,b
where a.field0=b.f1
 
字段f2公式可能很复杂,有系数,而且不止两个字段,如何通过sql语句查出公式,再从
table2中取出值赋给公式中相应的字段
 
对于简单的公式则如ugvanxk所说

对于复合公式,可以将table1的f1字段值作如下处理:
在字段值字符串中分别查找替换'field1','field2'为'table2.field1.asfloat','table2.field2.asfloat'
后将此字段值字符串合并到SQL语句中即可

字符处理要用到 i:=pos('field1',table1.fieldbyname('f2').asstring);copy();
 
我认为对于复杂公式还是应当把它变成逆波兰表达式,用程序的方法把数字填到相应的字段里面。
如果要直接用SQL,就写STORED PROCEDURE然后用SQL语句就可以了。
 
用游标做,先用select @a=gongshi取出公式,再用update语句计算
select @str='update tablename set fieldname='+@a
exec(@str)
就可以
 
接受答案了.
 
后退
顶部