使用 CASE 语句 SQL 在 table 中创建新列

creating new column in table using CASE statement SQL

我在 SQL 中有一个名为 'full_data' 的 table,它看起来像:

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

我想使用 CASE 语句将新列添加到 full_data 中。 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

使用什么代码才能使最后的 table 看起来像:

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

您只需将 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 不支持生成的列,因此视图是您的最佳选择。