سؤال

أريد أن أكون قادرًا على تخزين قيمة عشرية في عمود واحد، وفي العمود الآخر لتخزين int الذي يمثل الخيار (سوف يشرح):

  1. يجب أن تكون قاعدة -%
  2. ينبغي أن تكون قاعدة -مطلقة
  3. يجب أن تكون قاعدة +%
  4. يجب أن تكون قاعدة + مطلقة
  5. 1 و 2 خصم
  6. 3 و 4 هي تكلفة إضافية
  7. 1 و 3 يقلل/يزيد المبلغ بنسبة مئوية (أي.المبلغ * المبلغ/القيمة).
  8. 2 و 4 يقلل/يزيد المبلغ تمامًا (أي.المبلغ +/- القيمة).

بمعنى أن لدي جدول مكون من 3 أعمدة:

  • المال الأساسي
  • السعر العشري الإضافي
  • الخيار صغير

و

  • عمود محسوب (عشري؟)

لنفترض أن لدينا صفًا يكون فيه BasePrice هو 100 والسعر الإضافي هو 0.20

وفقًا للخيار، يجب أن يُنشئ العمود المحسوب القيمة التالية:

  • 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)
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top