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

如何将Oracle数据库指定列的行值转换为列标题?

Oracle 学生成绩行转列查询方案

方案一:使用PIVOT函数(Oracle 11g及以上推荐)

假设你的成绩主表名为STUDENT_SCORES,包含字段:STUDENT_ID(学生ID)、STUDENT_NAME(姓名)、SUBJECT(科目)、SCORE(成绩),可以用PIVOT直接实现行转列:

SELECT *
FROM (
    SELECT STUDENT_ID, STUDENT_NAME, SUBJECT, SCORE
    FROM STUDENT_SCORES
)
PIVOT (
    MAX(SCORE) FOR SUBJECT IN (
        '语文' AS 语文,
        '数学' AS 数学,
        '英语' AS 英语,
        '物理' AS 物理 -- 根据实际科目列表补充
    )
)
ORDER BY STUDENT_ID;
  • MAX(SCORE)使用聚合函数是因为每个学生单科目仅一条记录,MAX/AVG/SUM结果一致
  • IN子句需枚举所有要转为列的科目,别名对应目标输出的列名

方案二:使用CASE WHEN + 聚合函数(兼容低版本Oracle)

如果你的Oracle版本低于11g,用传统方法实现:

SELECT
    STUDENT_ID,
    STUDENT_NAME,
    MAX(CASE WHEN SUBJECT = '语文' THEN SCORE END) AS 语文,
    MAX(CASE WHEN SUBJECT = '数学' THEN SCORE END) AS 数学,
    MAX(CASE WHEN SUBJECT = '英语' THEN SCORE END) AS 英语,
    MAX(CASE WHEN SUBJECT = '物理' THEN SCORE END) AS 物理 -- 按需添加科目
FROM STUDENT_SCORES
GROUP BY STUDENT_ID, STUDENT_NAME
ORDER BY STUDENT_ID;
  • 通过CASE WHEN匹配对应科目,聚合函数MAX用于过滤NULL值,确保每个学生每个科目仅显示对应成绩
  • GROUP BY按学生ID和姓名分组,保证每行对应一个学生的所有成绩

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:53:29