You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:23:43