如何在Sql Server中计算表达式

时间:2019-02-11 15:23:12

标签: sql sql-server

我有两个如下表:

Table 1

Table 2

如何计算E001的ID PAY2公式值。计算方式如下:parameter1 = basic和基础E001 = 1000

因此,根据公式if PAY1>4000 then PAY5(可能是参数5的值为200)

因此对于E001,基本值为1000,如果条件和值应为{PAY1}/100,如1000/100=10,则为false。

是否可以在列中执行if和else条件并计算其值?

1 个答案:

答案 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');