使用CASE语句实现列值递增时SQL语法报错,请求排查问题
排查你的SQL语法错误
看了你的代码,问题出在CASE语句的结构使用错误上。你只在第一个列前写了CASE,但后面的WHEN没有对应的CASE关键字,SQL编译器无法识别这些孤立的WHEN子句。
错误代码的核心问题
你原代码的结构大概是这样(简化后):
SELECT CASE WHEN RATING = 'VERY_POOR' THEN 1 ELSE 0 END 'VERYPOOR', -- 这里缺少CASE关键字,直接写WHEN是无效的 WHEN RATING = 'POOR' THEN 1 ELSE 0 END 'POOR', ...
每个需要条件判断的列都需要完整的CASE ... END结构,不能共享同一个CASE开头。
修正后的代码方案
如果你是想把每一行的RATING值转换成对应列的1/0(比如行转列标记),可以给每个列单独加CASE:
SELECT CASE WHEN RATING = 'VERY_POOR' THEN 1 ELSE 0 END AS VERYPOOR, CASE WHEN RATING = 'POOR' THEN 1 ELSE 0 END AS POOR, CASE WHEN RATING = 'AVERAGE' THEN 1 ELSE 0 END AS AVERAGE, CASE WHEN RATING = 'GOOD' THEN 1 ELSE 0 END AS GOOD, CASE WHEN RATING = 'VERY_GOOD' THEN 1 ELSE 0 END AS VERYGOOD FROM your_table_name; -- 记得替换成你的表名
如果你是想统计每个评级的总数量(也就是你提到的“递增操作”计数需求),可以用SUM配合CASE,再按需加上GROUP BY:
SELECT SUM(CASE WHEN RATING = 'VERY_POOR' THEN 1 ELSE 0 END) AS VERYPOOR_COUNT, SUM(CASE WHEN RATING = 'POOR' THEN 1 ELSE 0 END) AS POOR_COUNT, SUM(CASE WHEN RATING = 'AVERAGE' THEN 1 ELSE 0 END) AS AVERAGE_COUNT, SUM(CASE WHEN RATING = 'GOOD' THEN 1 ELSE 0 END) AS GOOD_COUNT, SUM(CASE WHEN RATING = 'VERY_GOOD' THEN 1 ELSE 0 END) AS VERYGOOD_COUNT FROM your_table_name; -- 如果需要按其他维度分组(比如日期、类别),就加上 GROUP BY your_group_column;
这样修改后,就能正常执行,不会再报语法错误了。
内容的提问来源于stack exchange,提问作者Sooraj V
相关产品推荐
相关产品推荐

