日期:2014-05-19  浏览次数:20482 次

如何替代的问题,把公式里的代码替换成实际值,请问如何写SQL语句,谢谢!
有一个表   taskname  
有几个字段如下:
taskid       int
task     decimal(15,2)       任务
assess   decimal(15,2)     完成
form       varchar(50)       计算工式
具体数据示例如下:
1           12     15           A/T+1
2             13     10         A*T-3


A代表   assess           T代表task  
现在想根据公式值,得到相应的分值
taskid     task       assess                             应得到:
1             12                 15           A/T+1             2.25                  
2             10                 34           A*T-3             0.4

如何写SQL语句?

ALTER           FUNCTION   deptaccess(@A   decimal(15,2),@P   decimal(15,2),@taskid   int)
returns   varchar(100)
as
begin
          declare   @ret   varchar(100)
          set   @ret=0
          select   @ret=replace(replace(formula, 'A '   ,@A   ), 'P ',@P)     from   as_taskname   where   taskid=@taskid   order   by   dept_kind   desc
          return   @ret
end

写了这个函数,返回的是字符串,把计算过程返回了,如何得到计算结果呢?

谢谢!




------解决方案--------------------
2005还是2000
------解决方案--------------------
declare @temp table
(
A1 int,
A2 int,
A3 int,
formula varchar(30)
)

insert into @temp values(1,2,3, 'A1+A2+A3 ')
insert into @temp values(4,2,3, 'A1+A2-A3 ')
insert into @temp values(1,4,3, 'A1-A2+A3 ')
insert into @temp values(1,7,3, 'A1+A2+A3 ')
insert into @temp values(1,2,6, 'A1-A2-A3 ')
insert into @temp values(1,8,3, 'A1+A2+A3 ')

create table #
(
A1 int,
A2 int,
A3 int,
formula varchar(30),
value int
)

insert #(a1,a2,a3,formula)
select * from @temp

declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ ' when ' ' '+formula+ ' ' ' then '+formula+ ' '
from @temp
group by formula

exec( 'update # set value=case formula '+@sql+ ' end ')
select a1,a2,a3,value,formula --- formula只是为了检查结果
from #

drop table #

/*
a1 a2 a3 value formula
------------------------------------------------
1 2 3 6 A1+A2+A3
4 2 3 3 A1+A2-A3
1 4 3 0 A1-A2+A3
1 7 3 11 A1+A2+A3
1 2 6 -7 A1-A2-A3
1 8 3 12 A1+A2+A3
*/