假设以下数据:
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,但我对其他数据库中的实现很感兴趣。
答案 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