如何修正Oracle SQL子查询:按name_type拆分full_name为中英文列
修正后的SQL查询方案
原SQL语句存在语法错误:使用逗号分隔两个独立子查询后重复声明FROM per_person_names_f,不符合SQL语法规范。以下是两种可行的修正方案,根据你的实际需求选择:
方案一:使用CASE WHEN条件聚合(推荐,适合同一人员的两类姓名同行展示)
如果你的表中有唯一标识人员的字段(比如person_id),可以用这个方法将同一人的英文、阿拉伯语姓名整合到同一行的两列中:
SELECT person_id, -- 替换为你表中实际的人员唯一标识字段 MAX(CASE WHEN name_type = 'GLOBAL' THEN full_name END) AS "english name", MAX(CASE WHEN name_type = 'SA' THEN full_name END) AS "arabic name" FROM per_person_names_f GROUP BY person_id; -- 必须按人员唯一标识分组
如果不需要分组(仅需汇总所有GLOBAL和SA类型的姓名,不保证同行对应),可以去掉GROUP BY和person_id,但结果会是一行汇总数据。
方案二:使用自连接(适合同一人员两类姓名严格对应)
若表中存在关联同一人员的字段(比如person_id),可以通过自连接将两类姓名关联:
SELECT global.full_name AS "english name", sa.full_name AS "arabic name" FROM per_person_names_f global INNER JOIN per_person_names_f sa ON global.person_id = sa.person_id -- 替换为实际关联字段 AND global.name_type = 'GLOBAL' AND sa.name_type = 'SA';
如果允许某类姓名缺失,可将INNER JOIN改为LEFT JOIN或RIGHT JOIN。
内容的提问来源于stack exchange,提问作者aasem shoshari
相关产品推荐
相关产品推荐

