我希望根据规则拥有一个SQL计算列

时间:2009-10-25 19:43:02

标签: sql sql-server sql-server-2005 case calculated-columns

我希望能够在一列中存储十进制值,在另一列中存储表示选项的int(将解释):

  1. 应该是基础 - %
  2. 应该是base -absolute
  3. 应为base +%
  4. 应该是base + absolute
  5. 1& 2是折扣
  6. 3& 4是增压
  7. 1& 3减少/提高金额百分比(即金额*金额/价值)。
  8. 2& 4绝对减少/提高金额(即金额+/-值)。
  9. 意思是我有一个包含3列的表格:

    • BasePrice money
    • AdditionalPrice decimal
    • 选项tinyint

    • ComputedColumn(十进制?)

    假设我们有一行它的BasePrice是100而AdditionalPrice是0.20

    根据选项,计算的col应生成以下值:

    • 80
    • 99.80
    • 120
    • 100.20
    我清楚了吗? 有什么方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:3)

我也将计算列保留为金钱。

在内部,由于Data Type Precedence

,这将转换为十进制
CREATE TABLE (
...,
ComputedColumn AS CAST (
    CASE Option
        WHEN 1 THEN BasePrice * (1 - AdditionalPrice)
        WHEN 2 THEN BasePrice - AdditionalPrice
        WHEN 3 THEN BasePrice * (1 + AdditionalPrice)
        WHEN 4 THEN BasePrice + AdditionalPrice
    END AS money)
)