Ich möchte eine SQL berechnete Spalte haben Regeln, nach
-
06-07-2019 - |
Frage
Ich mag einen Dezimalwert in einer Spalte speichern zu können, und in der anderen Spalte ein int zu speichern, die die Option darstellt (wird erklärt):
- soll Basis sein -%
- sollte Basis -absoluten sein
- sollte base +% sein
- sollte base + absolute
- 1 & 2 ist ein Rabatt
- 3 und 4 ist ein upcharge
- 1 und 3 verringert / erhöht den Betrag, um Prozentsatz (d.h. Menge * Menge / value).
- 2 & 4 verringert / erhöht die Menge absolut (das heißt Menge +/- Wert).
Bedeutung Ich habe eine Tabelle von 3 Spalten:
- Grundpreis Geld
- AdditionalPrice dezimal
- Option Tinyint
und
- ComputedColumn (dezimal?)
Lassen Sie uns sagen, dass wir eine Reihe haben, dass es Grundpreis ist 100 und die AdditionalPrice 0,20
Nach der Wahl der berechnete Spalte sollte den folgenden Wert generieren:
- 80
- 99,80
- 120
- 100,20
Bin ich klar? Gibt es eine Möglichkeit, dies erreichen kann?
Lösung
Ich würde die berechnete Spalte als Geld behalten zu.
Intern wird diese in Dezimalzahlen werfen wegen Datentyp Präzedenz
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)
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow