简单地说,我有两个规则表,一个列出所有规则,另一个列出规则的详细信息:
Rule_ID Rule_Name
1 "Rule Name 1"
2 "Rule Name 2"
Target_Rule_ID Condition
1 >10
1 <20
1 !=15
1 !=18
2 >30
含义:对于Rule_ID编号1,该值大于10,小于20,而不是eqaul到15也不是18。
我需要将此规则应用于另一个数据表,例如:
ID Value
1 11
2 60
3 15
并将结果如下:
ID Value Rule_ID
1 11 1
2 60 2
3 15 null
我能想到的当前方法是使用像python这样的高级语言。
但听起来效率低,因为这意味着我需要将规则与数据表连接X次(X =总规则数)。
我想知道有没有更好的方法直接在sql server中执行此操作?有什么建议吗?
(同时假设规则不会相互冲突,这会使问题更加困难)......
答案 0 :(得分:1)
无论你在哪里,都需要一种方法将数值与其规则表达式分开(条件,如&lt; 10等)。您是否考虑过分离表达式和值?
像
这样的东西rule_details table:
t_rule_id rule_type Value
1 > 10
1 < 20
将该集合加入要检查/验证的信息集。有很多案例陈述
case
when rule_type = '>' and value > other_value then true
when rule_type = '>' and value <= other_value then false
...
end as rule_satisfied
您可以根据规则详细信息中列出的条件创建一列来验证每个数字。此时,您可以对创建的每个组执行逻辑AND - &gt;如果为TRUE则满足所有规则。