Объединение двух результатов условной логики в один оператор case - PullRequest
1 голос
/ 27 января 2010

Я написал запрос, чтобы выбрать значения продаж из базы данных и применить скидки, если они были использованы. Скидки либо в процентах, либо просто фиксированная стоимость. Мой запрос применяет скидки (в первом выписке), а затем извлекает примененную сумму.

Это заставило меня задуматься, можно ли было сделать это в одном случае.

Запрос:

SELECT
SUM(CASE 
 WHEN td.Transaction_ID IS NULL
  THEN p.Sale
 WHEN td.Transaction_ID IS NOT NULL AND d.Discount_Type = '0'
  THEN p.Sale - (p.Sale * (dp.Discount_Percent/100))
 ELSE
  p.Sale - dv.Discount_Value
END) PriceDiscounted,
SUM(CASE
 WHEN td.Transaction_ID IS NOT NULL AND d.Discount_Type = '0'
  THEN (p.Sale * (dp.Discount_Percent/100))
 WHEN td.Transaction_ID IS NOT NULL AND d.Discount_Type = '1'
  THEN dv.Discount_Value
 ELSE '0'
END) Discount

1 Ответ

1 голос
/ 27 января 2010

Нет оператора CASE внутри SELECT является функцией и может возвращать только одно значение. Вы можете реализовать это внутри хранимой процедуры, в которой вы можете использовать CASE или IF THEN.

...