如何实现公式用户自己定义?

haslong 2005-05-31 09:45:33
例如,有一算法表:
公式 参数x 参数y 开始时间 结束时间
sum(x)/sum(y) a b 2004 2005


那么应该返回
select sum(a)/sum(b) from table where calendar between 2004 and 2005
的执行结果。

函数或者存储过程都可以,最好是函数,那么在其他SQL语句中也可以调用了
...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
haslong 2005-05-31
  • 打赏
  • 举报
回复
非常感谢,按照先来后到给分,望包涵!
pengdali 2005-05-31
  • 打赏
  • 举报
回复
declare @s varchar(8000)
select @s='select '
+replace(replace(公式,'x',参数x),'y',参数y)
+' 结果,* from table where calendar between '
+cast(开始时间 as char(4))+' and '+cast(结束时间 as char(4))
from 算法表

exec (@s)
talantlee 2005-05-31
  • 打赏
  • 举报
回复
用存储过程
create proc try_qs
@vtbname varchar(50), ---表名
@vColumnname1 varchar(50),---字段名1
@vColummname2 varchar(50),----字段名2
@Vtime1 varchar(50),----开始时间
@vTime varchar(50),---结束时间
@vcolname varchar(50) ---判断条件
as
exec('select sum('+quotename(@vColumnname1)+')/sum('+quotename(@vColumnname2)+') from '+quotename(@vtbname)+' where '+quotename(@vcolname)+' between '''+@vTime1+''' and '''+@vTime2+'''')---类似这样,没经过调试,楼主可以用个print来检查一下有无错
---测试
--print 'select sum('+quotename(@vColumnname1)+')/sum('+quotename(@vColumnname2)+') from '+quotename(@vtbname)+' where '+quotename(@vcolname)+' between '''+@vTime1+''' and '''+@vTime2+''''

-----
exec try_qs 'table','a','b','2004','2005','calendar'

zjcxc 元老 2005-05-31
  • 打赏
  • 举报
回复
--存储过程可以,使用类似下面的方法
declare @s nvarchar(4000)
select @s='select @re=('
+replace(replace(公式,'x',参数x),'y',参数y)
+') from table where calendar between '
+rtrim(开始时间)+' and '+rtrim(结束时间)
from 算法表
declare @re float
exec sp_executesql @s,N'@re out',@re out
select 结果=@re
zjcxc 元老 2005-05-31
  • 打赏
  • 举报
回复
函数不能实现. 函数不支持动态sql语句.

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧