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á):

  1. debe ser base -%
  2. debe ser base -absoluta
  3. debe ser base +%
  4. debe ser base + absoluto
  5. 1 & amp; 2 es un descuento
  6. 3 & amp; 4 es un recargo
  7. 1 & amp; 3 reduce / aumenta la cantidad en porcentaje (es decir, cantidad * cantidad / valor).
  8. 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?

¿Fue útil?

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
scroll top