Использование случая, когда и где в SQL?

#sql

Вопрос:

У меня есть следующая таблица. Мне нужен SQL для суммы продаж в 2016 году в евро? Я пытаюсь выполнить следующий код, но получаю синтаксическую ошибку!

 Select 
    sum (quantity * price),
    case 
        when lower(currency) = pound 
            then set price = 1.1 * price
    end
from 
    order_items
where 
    year(order_date) = 2016;
 

Order_Items:

order_item_key ключ заказа дата заказа пользовательский ключ prime_status Количество Цена Валюта
xyz ксп 2020-06-01 123abc456 0 1 35 фунт
азбука sdl 2019-08-15 567fjs290 1 2 2.3 Евро
wrt тер 2016-08-15 567fjs460 1 2 2.3 Евро
тю qwe 2016-08-15 567fjs350 1 3 4.3 Евро

Комментарии:

1. Несколько вещей: (1) фунт-это строка, поэтому вам нужно ссылаться на нее как на строку в вашем операторе case. (2) Вам не нужно использовать «установленную цену». 1.1*цена достаточна.

2. Разве это не вопрос цитат? В своей 3-й строке вы написали: when lower(currency) = pound then и я предполагаю, что вы намеревались поставить when lower(currency) = "pound" then кавычки вокруг pound

Ответ №1:

Как написано, pound предполагается, что это столбец — вам нужно процитировать его как строковый литерал.

Кроме того, case это выражение, которое возвращает значение, set не является допустимым синтаксисом.

 Select sum(quantity*price) as total,
price * 
  case 
    when lower(currency) = 'pound' 
  then 1.1 else 1 end as rate
from order_items
where YEAR(order_date) = 2016;
 

Комментарии:

1. Также необходима ГРУППА ПО.

Ответ №2:

Я думаю, что это лучше всего сделать с помощью подзапроса. В подзапросе вы сначала конвертируете любые цены «в фунтах» в евро. Внешний запрос вычисляет общий объем продаж за 2016 год в евро.

 select sum(quantity*euro_price) as euro_sales_2016
from (
    select quantity,
           case when lower(currency) = 'pound'
                then price * 1.1
                else price 
           end as euro_price
    from order_items 
    where YEAR(order_date) = 2016
) a;