SQL. Применять бизнес-правила иерархически - PullRequest
0 голосов
/ 11 ноября 2010

SQL2008. У меня есть значения с плавающей точкой в ​​таблице, которые должны быть переопределены следующим набором правил. Правила в другой таблице.

Однако правила являются иерархическими, т. Е. - Мне нужно применять самые строгие из всех подходящих правил для каждой строки в основной таблице.

Вот пример ... Таблица правил (B и C могут быть NULLS)

A    B    C    Value
1    2    3    100
1    2    NULL 80
1    NULL NULL 60

Main Table
A     B     C     Value OverridenValue
1     2     3     1     100
1     2     2     2     80
1     3     1     3     60
3     1     3     4     4    <- no override as no rule found
NULL  NULL  NULL  5     5    <- no override as no rule found

Мне нужна скалярная функция, т.е. fnGetOverridenValue (@A int, @B int, @C int) Возвращает float

1 Ответ

0 голосов
/ 11 ноября 2010
Select m.A, m.B, m.C, m.[Value],
  Case 
    When Not IsNull(r1.Value) Then r1.Value
    When Not IsNull(r2.Value) Then r2.Value
    When Not IsNull(r3.Value) Then r3.Value
    Else m.[Value]
  End as Overriddenvalue
From
  MainTable m
  Left Join RulesTable r1 on m.A=r1.A and m.B=r1.B and m.C=r1.C
  Left Join RulesTable r2 on m.A=r2.A and m.B=r2.B and r2.C is NULL
  Left Join RulesTable r3 on m.A=r3.A and r3.B is NULL and r3.C is NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...