使用CASE语句按日期拆分video_views列生成多列失败求助
问题分析与修正方案
你的SQL代码存在两个关键问题:
- 开头多余的
video_views AS破坏了CASE语句的结构,导致语法错误 - 表名的引号不匹配(
table_name'应该改为成对的反单引号table_name)
要实现按年份拆分video_views为多列,每一列需要对应一个独立的CASE表达式,同时可以用ELSE指定不满足条件时的默认值(比如0或NULL)。
修正后的SQL代码如下:
SELECT CASE WHEN date >= '2020-01-01' AND date <= '2020-12-31' THEN video_views ELSE 0 END AS video_views_20, CASE WHEN date >= '2021-01-01' AND date <= '2021-12-31' THEN video_views ELSE 0 END AS video_views_21, CASE WHEN date >= '2022-01-01' AND date <= '2022-12-31' THEN video_views ELSE 0 END AS video_views_22 FROM `table_name`
补充说明
- 如果希望不满足年份条件的行显示
NULL而非0,直接去掉每个CASE里的ELSE 0即可 - 部分SQL方言支持更简洁的年份判断,比如用
EXTRACT(YEAR FROM date) = 2020替代日期区间判断,写法更简洁:
SELECT CASE WHEN EXTRACT(YEAR FROM date) = 2020 THEN video_views ELSE 0 END AS video_views_20, CASE WHEN EXTRACT(YEAR FROM date) = 2021 THEN video_views ELSE 0 END AS video_views_21, CASE WHEN EXTRACT(YEAR FROM date) = 2022 THEN video_views ELSE 0 END AS video_views_22 FROM `table_name`
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

