2010-11-11 5 views
0

SQL2008. J'ai des valeurs flottantes dans une table qui doivent être remplacées en suivant un ensemble de règles. Les règles sont dans une autre table.SQL. Application hiérarchique des règles de gestion

Toutefois, les règles sont hiérarchiques, c'est-à-dire - Je dois appliquer la plus stricte de toutes les règles appropriées pour chaque ligne de la table principale.

Voici l'exemple ... Règles tableau (B et C peuvent être 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 

je besoin d'une fonction scalaire-à-dire fnGetOverridenValue (@A int, int @B, @C int) Renvoie le flotteur

Répondre

0
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 
Questions connexes