Quiero tener una columna calculada de SQL de acuerdo con las reglas
-
06-07-2019 - |
Pregunta
Quiero poder almacenar un valor decimal en una columna, y en la otra columna para almacenar un int que represente la opción (explicará):
- debe ser base -%
- debe ser base -absoluta
- debe ser base +%
- debe ser base + absoluto
- 1 & amp; 2 es un descuento
- 3 & amp; 4 es un recargo
- 1 & amp; 3 reduce / aumenta la cantidad en porcentaje (es decir, cantidad * cantidad / valor).
- 2 & amp; 4 reduce / aumenta la cantidad absolutamente (es decir, cantidad +/- valor).
Lo que significa que tengo una tabla de 3 columnas:
- BasePrice money
- AdditionalPrice decimal
- Opción tinyint
y
- ComputedColumn (decimal?)
supongamos que tenemos una fila de que el Precio base es 100 y el Precio adicional es 0,20
Según la opción, la columna calculada debe generar el siguiente valor:
- 80
- 99.80
- 120
- 100.20
¿Estoy claro? ¿Hay alguna manera de lograr esto?
Solución
También mantendría la columna calculada como dinero.
Internamente, esto se convertirá en decimal debido a Precedencia de tipo de datos
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)
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow