从列中检索算术并使用它来计算值

时间:2015-03-26 13:22:28

标签: sql sqlite

假设以下数据:

TABLE articles
id          price
-----------------
1           100
2           200

TABLE conditions
id          modifier
-----------------
EXW         *1
FCA         *1.5
OT1         +125
OT2         *1.5+100

我想要的是:

id          price         condition
----------------------------------
1           100           EXW
2           200           EXW
1           150           FCA
2           300           FCA
1           225           OT1
2           325           OT1
1           250           OT2
2           400           OT2

基本上,代码应该采用价格和修饰符(基本上是一个不完整的公式)并执行它。该公式可能需要稍微不同的格式(可能price*1.5或更复杂的变体(price + 100) * 1.5

仅使用乘法器和加法的替代解决方案相当简单,但如果需要除法或多个操作,事情可能会变得混乱(加法再乘以 - 见上例)。

我正在使用SQLite 3.8.8.2,但我对其他数据库中的实现很感兴趣。

2 个答案:

答案 0 :(得分:0)

您可以使用sp_executesql来评估任何表达式:

DECLARE @calc varchar(max);
set @calc = '10*4.5*0.5'

declare @sql nvarchar(max)
declare @result float
set @sql = N'set @result = ' + @calc
exec sp_executesql @sql, N'@result float output', @result out
select @result

这是一个高级的想法和代码! 为了使其符合您的要求,您可以创建一个StoredProcedure来评估此类表达式并从中返回结果,并在您的查询中调用该过程!

<强>代码:

Create Procedure SP_EvaluateExpression
@expression nvarchar(max)
AS
BEGIN
declare @sql nvarchar(max)
declare @result float
set @sql = N'set @result = ' + @expression
exec sp_executesql @sql, N'@result float output', @result out
return @result
END

您的查询应如下所示:

  

选择articles.ID,CONCAT(articles.Price,modifier)为   价格,条件。条件&#39;条件&#39;来自文章交叉加入   条件

希望这有帮助!

答案 1 :(得分:0)

使用select而不连接但juste选择了表格,通过利弊我不知道列操作数是否不会成为问题

Select articles.id,articles.Price*modifier, condition.id as condition
from articles, condition