代码之家  ›  专栏  ›  技术社区  ›  Boppity Bop

SQL。按层次结构应用业务规则

  •  0
  • Boppity Bop  · 技术社区  · 14 年前

    SqL2008。我在一个表中有一个浮点值,在下面的一组规则中需要覆盖它。规则在另一个表中。

    但是,规则是分级的,即- 我需要对主表中的每一行应用最严格的所有适用规则。

    以下是例子…规则表(b和c可以为空)

    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
    

    我需要一个标量函数ie fngetoverridenvalue(@a int,@b int,@c int)返回float

    1 回复  |  直到 14 年前
        1
  •  0
  •   Bill    14 年前
    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