ルールに従ってSQL計算列が欲しい
-
06-07-2019 - |
質問
10進値を1つの列に格納し、別の列にオプションを表すintを格納できるようにしたい(説明します):
- ベースにする必要があります-%
- ベースにする必要があります-絶対
- ベース+%でなければなりません
- ベース+ absoluteである必要があります
- 1& 2は割引です
- 3& 4は追加料金です
- 1& 3は、パーセンテージで金額を増減します(つまり、金額*金額/値)。
- 2& 4は、金額を絶対的に削減/引き上げます(つまり、金額+/-値)。
意味3列のテーブルがあります:
- BasePriceマネー
- AdditionalPrice decimal
- オプションtinyint
and
- ComputedColumn(10進数?)
BasePriceが100でAdditionalPriceが0.20である行があるとしましょう
オプションに従って、計算されたcolは次の値を生成する必要があります。
- 80
- 99.80
- 120
- 100.20
クリアですか? これを達成する方法はありますか?
解決
計算列も金銭として保持します。
内部的には、データ型の優先順位
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)
)
所属していません StackOverflow