使用CASE表达式查询时Oracle SQL报FROM关键字错误排查
问题分析与修正
错误原因
- 关键字冲突:
IN是Oracle的保留关键字,直接用它作为列别名AS in会触发语法解析错误,这是ORA-00923报错的直接原因。 - 分组逻辑错误:
GROUP BY子句包含了cf.NOM_CF,会让结果按「月份+NOM_CF」分组,最终每个月份会生成两行数据(分别对应COST和ENTRY),和你预期的一行展示当月IN、OUT统计结果不符。
修正后的SQL语句
SELECT de.MONTH, SUM(CASE WHEN cf.NOM_CF = 'ENTRY' THEN de.MB END) AS "IN", SUM(CASE WHEN cf.NOM_CF = 'COST' THEN de.MB END) AS "OUT" FROM DETALLE_ARCHIVO_IOT de INNER JOIN ARCHIVO_IOT cab ON cab.ID_ARCHIVO_IOT = de.ID_ARCHIVO_IOT INNER JOIN PLMN p ON p.CODE_PLMN = de.code INNER JOIN CF cf ON cf.ID_CF = de.ID_CF WHERE de.MONTH BETWEEN '202101' AND '202104' AND de.CALL_TYPE = 'GPRS' AND cab.ESTADO_DETALLE = 1 GROUP BY de.MONTH ORDER BY de.MONTH;
说明
- 用双引号包裹
"IN"和"OUT"别名,规避Oracle保留关键字冲突; - 移除
GROUP BY中的cf.NOM_CF,确保每个月份仅生成一行统计结果,CASE表达式会自动对符合条件的记录求和并合并到对应列中。
内容的提问来源于stack exchange,提问作者mohamed
相关产品推荐
相关产品推荐

