создание нового столбца в таблице с использованием CASE statement SQL

#sql #case #amazon-redshift

#sql #case #amazon-redshift

Вопрос:

У меня есть таблица в SQL с именем ‘full_data’, которая выглядит следующим образом:

 Date         Product    Size   Currency    Paid
10/11/2020   T-shirt    M      EUR         40.00
09/11/2020   Hoodie     S      USD         60.00
etc...
  

Я хочу добавить новый столбец в full_data, используя оператор CASE. Оператор CASE выглядит следующим образом:

 CASE
    WHEN Product = 'Hoodie' AND Size = 'S' THEN 'Small hoodie'
    WHEN Product = 'Hoodie' AND Size = 'M' THEN 'Medium hoodie'
    WHEN Product = 'T-shirt' AND Size = 'S' THEN 'Small shirt'
    WHEN Product = 'T-shirt' AND Size = 'M' THEN 'Medium shirt'
    ELSE 'Other product'
END AS sale_note
  

Какой правильный код использовать, чтобы таблица в конце выглядела так:

 sale_note       Date         Product    Size   Currency   Paid
Medium shirt    10/11/2020   T-shirt    M      EUR        40.00
Small hoodie    09/11/2020   Hoodie     S      USD        60.00
  

Ответ №1:

Вы бы просто поместили case выражение в select :

 SELECT (CASE WHEN Product = 'Hoodie' AND Size = 'S' THEN 'Small hoodie'
             WHEN Product = 'Hoodie' AND Size = 'M' THEN 'Medium hoodie'
             WHEN Product = 'T-shirt' AND Size = 'S' THEN 'Small shirt'
             WHEN Product = 'T-shirt' AND Size = 'M' THEN 'Medium shirt'
             ELSE 'Other product'
        END) AS sale_note,
       fd.*
FROM full_data fd;
  

Вы можете создать представление с этой информацией:

 create view v_full_data as
    SELECT (CASE WHEN Product = 'Hoodie' AND Size = 'S' THEN 'Small hoodie'
                 WHEN Product = 'Hoodie' AND Size = 'M' THEN 'Medium hoodie'
                 WHEN Product = 'T-shirt' AND Size = 'S' THEN 'Small shirt'
                 WHEN Product = 'T-shirt' AND Size = 'M' THEN 'Medium shirt'
                 ELSE 'Other product'
            END) AS sale_note,
           fd.*
    from full_data fd;
  

Я не думаю, что Redshift поддерживает сгенерированные столбцы, поэтому просмотр — ваш лучший вариант.