sql - 使用 CASE 语句 SQL 在表中创建新列
问题描述
我在 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...
我想使用 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
什么是正确的代码,以便最后的表格看起来像:
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 不支持生成的列,因此视图是您的最佳选择。
推荐阅读
- php - 这种方法足以保护我的主机(php)吗?
- javascript - 在运行时替换我网站特定页面中所有出现的字符串
- ios - 为什么 Cordova ios Vue 组件在迁移到 WKWebview 后仅在重新加载应用程序时显示?
- javascript - 使用 Mozilla PDFJS 如何显示所有页面而不是单个页面
- google-apps-script - 如何增加通过 google app 脚本发送的邮件计数,因为它限制了每次发送 100 封邮件
- linux - Docker awslogs 给出错误 NoCredentialProviders
- python - Pytest中如何实现交替等待两个元素?尝试除了不匹配
- powershell - Powershell 复制和重命名文件夹
- javascript - Chart.js 图形溢出容器
- r - 如何在“R Session Aborted”运行编译代码时找到 Fortran 错误消息?