2016-02-01 77 views
1

簡單地說,我用兩個規則表,一個列出了所有的規則,規則的其他列表的詳細信息:如何在表連接中結合多個條件?

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等高級語言。

  1. 得到規則的所有出
  2. 使where子句
  3. 一個

連接表之一,但聽起來很低效的,因爲這意味着我需要加入與數據表中的規則X次(X =總規則號)。

我不知道是否有更好的方式直接在sql server中做到這一點?有什麼建議麼?

(而且假定規則不會相互衝突,這將使問題更加困難)......

回答

1

無論在何處,你做的,你需要一種方法來分開數值的規則表達式(條件,如< 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 

您可以創建一個列,根據規則詳細信息中列出的條件來驗證每個數字。此時,您可以對每個創建的組執行邏輯與 - >如果爲TRUE,則所有規則都滿足。