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

Oracle中用Join、Case When、To_char实现行转列结果异常求助

问题分析与解决思路

你的问题核心是日期格式提取逻辑错误,导致CASE WHEN的条件始终不成立,最终SUM结果全为0。

错误原因:

  • 第一个查询直接将日期类型的b.日期与字符串'Nov'比较,类型不匹配,条件永远不满足。
  • 第二个查询使用To_char(b.日期, 'dd-mon-yyyy')生成的是完整日期字符串(如'12-nov-2022'),和'Nov'完全不相等,条件同样不成立。

正确解决方法:

使用TO_CHAR函数时,指定仅提取月份缩写的格式参数:

  • 若数据库返回的月份缩写为混合大小写(如Nov/Dec),用'Mon'参数;
  • 若为全大写(如NOV/DEC),用'MON'参数。

修正后的SQL语句:

select 
    a.姓名 as 姓名,
    sum(case when TO_CHAR(b.日期, 'Mon') = 'Nov' then b.分数 else 0 end) as "11月分数",
    sum(case when TO_CHAR(b.日期, 'Mon') = 'Dec' then b.分数 else 0 end) as "12月分数"
from 
    表A a
join 
    表B b on a.编号 = b.编号
group by 
    a.姓名;

特殊情况处理:

如果日期字段是字符串类型而非日期类型,需要先转换为日期格式再提取月份:

select 
    a.姓名 as 姓名,
    sum(case when TO_CHAR(TO_DATE(b.日期, 'dd-mon-yyyy'), 'Mon') = 'Nov' then b.分数 else 0 end) as "11月分数",
    sum(case when TO_CHAR(TO_DATE(b.日期, 'dd-mon-yyyy'), 'Mon') = 'Dec' then b.分数 else 0 end) as "12月分数"
from 
    表A a
join 
    表B b on a.编号 = b.编号
group by 
    a.姓名;

内容的提问来源于stack exchange,提问作者Christian Nathanael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:45:34