【问题标题】:Calculating/Evaluate user defined formula with SQL使用 SQL 计算/评估用户定义的公式
【发布时间】:2020-01-16 16:25:35
【问题描述】:

我有一个保存用户定义的计算公式的表和另一个保存值的表。我需要将值注入到计算公式中,以便能够评估公式并返回结果。

公式表中名为“计算公式”的列行中的示例公式

(310165)/(7248+7249)

这些数字代表 Values 表中对应的 ValueID

ValueID | Value
7248    | 18521
7249    | 3835
310165  | 68546.24

我需要找到一种使用 SQL 的方法,通过与 Values 表中的 ValueID 匹配,将 Value 注入到 Formulas 表中的公式中。

我已经查看了替换和东西以及 xml 路径,但我似乎无法找到完成此操作的方法。完成此操作后,我需要评估使用实际值生成的表达式以返回一个 int 值。任何帮助是极大的赞赏。

【问题讨论】:

  • exec 'SQL 代码';或 EXEC (@SqlVariableName)
  • 您使用的是哪个 dbms? (ANSI SQL 没有这样的功能。)也许可以使用动态 SQL。
  • SQL server 2012 是表所在的位置。

标签: sql sql-server tsql


【解决方案1】:

此更新将动态处理整个表。注意@Formulas,我添加了一个ID和第二个示范记录

Declare @Formulas table (ID int,Calculation varchar(max))
Insert Into @Formulas values
(1,'([310165])/([7248]+[7249])'),
(2,'([999999])/([7248]+[7249])')

Declare @Values table (ValueID int,Value money)
Insert Into @Values values
(7248    , 18521),
(7249    , 3835),
(310165  , 68546.24),
(999999  , 75000)

Declare @SQL varchar(max)=''
Select  @SQL = @SQL+concat(',(',ID,',',Calculation,')') From @Formulas --Where ID=2
Select  @SQL = Replace(@SQL,'['+cast(ValueID as varchar(25))+']',Value) From @Values
Select  @SQL = 'Select * From ('+Stuff(@SQL,1,1,'values')+') N(ID,Value)'
Exec(@SQL)

返回

ID  Value
1   3.06612274109
2   3.35480407944

【讨论】:

  • 计算公式中的值实际上是“标记化”的,真正的输出是 ([310165])/([7248]+[7249]) 我只是省略了其中的 [ ] 以提高阅读能力对于那个很抱歉。这会对您提供的内容产生影响吗?感谢约翰的帮助
  • @Camp 查看更新的答案。这将一次性处理所有内容
  • @Camp 乐于助人
猜你喜欢
  • 2021-07-30
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
  • 2014-12-12
  • 2017-01-29
  • 1970-01-01
相关资源
最近更新 更多