LINUX.ORG.RU
решено ФорумAdmin

Вычисляемое значение поля

 ,


0

1

Имеется запрос вычисляющий:

  • «time_remaining» - Возраст, Дни,
  • «percent» - Процент исполнения, %

Договора

SELECT counterparty, agreement, now()::date-agreementdate::date AS time_remaining, round(100 * placed_in_production::integer/number_of_item::integer,1) AS percent FROM commerce WHERE counterparty = 'Клиент1'; 

Необходимо создать поле «Warning» и заполнить его значением из списка: «Hight», «Medium», «Low», «None» при условиях:

  • «Hight» - Если time_remaining (Возраст) <= 14 And percent (Процент исполнения) < 50,
  • «Medium» - Если time_remaining (Возраст) <= 14 And percent (Процент исполнения) >= 50,
  • «Low» - Если time_remaining (Возраст) > 14 And percent (Процент исполнения) > 50,
  • «None» - Если time_remaining (Возраст) >= 0 And percent (Процент исполнения) = 100,

Направьте на примеры, пожалуйста, возможной реализации.

★★★★★
Ответ на: комментарий от cobold
SELECT
  counterparty,
  agreement,
  now()::date-agreementdate::date AS time_remaining,
  round(100 * placed_in_production::integer/number_of_item::integer,1) AS percent,
  CASE
    WHEN
      now()::date-agreementdate::date <= 14
      AND
      round(100 * placed_in_production::integer/number_of_item::integer,1) < 50
    THEN 'Hight'
    WHEN
      now()::date-agreementdate::date <= 14
      AND
      round(100 * placed_in_production::integer/number_of_item::integer,1) >= 50
    THEN 'Medium'
    WHEN
      now()::date-agreementdate::date > 14
      AND
      round(100 * placed_in_production::integer/number_of_item::integer,1) >= 50
    THEN 'Low'
        WHEN
      now()::date-agreementdate::date > 14
      AND
      round(100 * placed_in_production::integer/number_of_item::integer,1) < 50
    THEN 'Hight'
    ELSE 'None'
  END
FROM commerce
WHERE counterparty = '${Customer}'; 
petav ★★★★★
() автор топика

Посмотри на Generated Columns.

gruy ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.