我有两个如下表:
如何计算E001的ID PAY2公式值。计算方式如下:parameter1 = basic
和基础E001 = 1000
。
因此,根据公式if PAY1>4000 then PAY5
(可能是参数5的值为200)
因此对于E001,基本值为1000,如果条件和值应为{PAY1}/100
,如1000/100=10
,则为false。
是否可以在列中执行if和else条件并计算其值?
答案 0 :(得分:1)
如果我正确解释了您的问题,您希望能够在数据库中嵌入公式,并执行这些公式来计算薪水。
这是一个很难解决的问题-您基本上是在尝试在SQL中实现最小编程语言。
我假设您要使用此功能,因为业务规则可能会更改(或至少更改参数),并且您不想在这种情况发生时花费开发人员时间。
如果您可以将公式表示为SQL,则可以使用dynamic SQL(exec功能),但这可能容易出错,并且很容易滥用-如果您允许人们将可执行的SQL代码存储为数据,该代码中的一个小错误可能会清除您的所有数据。这也很难测试。
开发人员很可能仍然必须编写动态SQL语句,因此您不太可能实现目标。
如果您可以区分“算法”和“参数”,则可以使非技术用户可以编辑这些参数,并且仅当算法更改时才需要开发人员参与。您可以将参数存储在数据库表中(并为它们提供比“ parameter_n”更好的名称)。这是entity/attribute/value存储有意义的少数情况之一,尽管最好在数据库中将其编码为XML或JSON,因为这将允许您声明模式(并对其进行测试!)
您的示例可能会变成:
select @allowance = (
select value
from parameters
where key = 'default_allowance')
where pay > (
select value
from parameters
where key = 'min_pay_for_allowance');
select @allowance = pay / (
select value
from parameters
where key = 'pay_divisor_for_allowance)
where pay <= (
select value
from parameters
where key = 'min_pay_for_allowance');