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

Oracle SQL CASE语句查询双语人名结果异常,求排查原因

问题分析与修复方案

核心问题

  • 大小写匹配错误:你的SQL里用'Global'去匹配name_type,但根据描述表中该字段存储的是全大写的'GLOBAL'。Oracle等数据库默认字符串匹配是大小写敏感的,所以完全匹配不上,导致english name列全为空。
  • 非目标类型行返回NULL:当行的name_type既不是SA也不是GLOBAL时,CASE语句没有对应的匹配分支,会默认返回NULL,这就是arabic name列存在部分空值的原因。

修复后的SQL

方案1:消除大小写影响(推荐)

用UPPER()或LOWER()统一转换后匹配,避免因存储的大小写不一致导致的问题:

SELECT
    rownum,
    CASE UPPER(name_type)
        WHEN 'GLOBAL' THEN full_name 
    END AS "english name",
    CASE UPPER(name_type)
        WHEN 'SA' THEN full_name 
    END AS "arabic name"
FROM 
    per_person_names_f

方案2:直接匹配正确大小写

如果确认表中name_type的存储值是固定全大写,也可以直接修正匹配字符串:

SELECT
    rownum,
    CASE name_type
        WHEN 'GLOBAL' THEN full_name 
    END AS "english name",
    CASE name_type
        WHEN 'SA' THEN full_name 
    END AS "arabic name"
FROM 
    per_person_names_f

进阶优化:合并同一人双语名称到一行

如果你的表中同一人物的英语、阿拉伯语名称是分开存储的两行,想要合并到同一行展示,可以用聚合函数配合分组(假设存在唯一标识人物的列,比如person_id):

SELECT
    person_id,
    MAX(CASE UPPER(name_type) WHEN 'GLOBAL' THEN full_name END) AS "english name",
    MAX(CASE UPPER(name_type) WHEN 'SA' THEN full_name END) AS "arabic name"
FROM 
    per_person_names_f
GROUP BY person_id

内容的提问来源于stack exchange,提问作者aasem shoshari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:05:52