Я хочу иметь вычисляемый столбец SQL в соответствии с правилами

Я хочу иметь возможность хранить десятичное значение в одном столбце, а в другом столбце хранить целое число, представляющее параметр (поясню):

  1. должно быть основание -%
  2. должен быть базис-абсолютным
  3. должна быть база +%
  4. должен быть базовым + абсолютным
  5. 1 и 2 это скидка
  6. 3 и 4 - это доплата
  7. 1 и 3 уменьшают/увеличивают сумму в процентах (т.е. сумма * сумма/значение).
  8. 2 и 4 абсолютно уменьшают/увеличивают количество (т.е. количество +/- значение).

Это означает, что у меня есть таблица из 3 столбцов:

  • Базовая цена в деньгах
  • Дополнительная цена десятичная
  • Опция тиниинт

и

  • ComputedColumn (десятичный?)

скажем, у нас есть строка, в которой базовая цена равна 100, а дополнительная цена равна 0,20.

В соответствии с параметром вычисляемый столбец должен генерировать следующее значение:

  • 80
  • 99.80
  • 120
  • 100.20

Я чистый? Есть ли способ добиться этого?


person Shimmy Weitzhandler    schedule 25.10.2009    source источник
comment
Лично я бы держался подальше от типа данных MONEY. Что это дает вам, чего нет в DECIMAL? Я писал о мифах о превосходной эффективности MONEY в прошлом году: is.gd/4BrRI   -  person Aaron Bertrand    schedule 26.10.2009


Ответы (1)


Я бы тоже оставил вычисляемый столбец в качестве денег.

Внутри это приведет к десятичному виду из-за приоритета типа данных.

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)
)
person gbn    schedule 25.10.2009