0

1 つの列に 10 進数値を格納し、もう 1 つの列にオプションを表す int を格納できるようにしたい (説明します)。

  1. ベース -% にする必要があります
  2. base -absolute である必要があります
  3. ベース +% にする必要があります
  4. ベース+絶対でなければなりません
  5. 1と2は割引
  6. 3 & 4 は追加料金です
  7. 1 & 3 は、パーセンテージで金額を増減します (つまり、金額 * 金額/値)。
  8. 2 と 4 は、金額を絶対的に増減します (つまり、金額 +/- 値)。

つまり、3列のテーブルがあります:

  • BasePrice マネー
  • 追加料金の小数
  • オプション tinyint

  • ComputedColumn (10 進数?)

BasePrice が 100 で、AdditionalPrice が 0.20 である行があるとします。

オプションによると、計算された列は次の値を生成する必要があります。

  • 80
  • 99.80
  • 120
  • 100.20

私の言いたいことが分かりますか?これを達成する方法はありますか?

4

1 に答える 1

3

計算列もお金として保持します。

内部的には、データ型の優先順位により、これは 10 進数にキャストされます。

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)
)
于 2009-10-25T19:50:34.550 に答える