oracle行转列(PIVOT),列转行(UNPIVOT)

1.行转列(PIVOT)

现有 学生-分数表 STUDENT_SCORE 如下:
在这里插入图片描述
想看到每个学生语数外的整体分数情况,这时候可以应用行转列(PIVOT):

SELECT * FROM STUDENT_SCORE
PIVOT(SUM(SCORE) FOR SUBJECT IN ('语文' AS CHINESE, '数学' AS MATH, '英语' AS ENGLISH)
)

查询结果为:

在这里插入图片描述

2.列转行(UNPIVOT)

现有 阶段-类型表 PERIOD_TYPE 如下:

在这里插入图片描述
每行记录能够追溯它已经进行过的PERIOD的ID(自关联),由此,我们现在假设一个需求,
现在去查ID为3的表记录,它所经历过的PERIOD的TYPE:

1>首先,可以查出它已经进行过的PERIOD的ID

SELECT PERIOD, HISTORY_ID FROM PERIOD_TYPE
UNPIVOT(HISTORY_ID FOR PERIOD IN (PERIOD_01, PERIOD_02, PERIOD_03)
)
WHERE ID = 3

查询结果为:
在这里插入图片描述
2>根据ID获取它所经历过的PERIOD的TYPE

SELECT TYPE FROM PERIOD_TYPE
WHERE ID IN (SELECT HISTORY_ID FROM PERIOD_TYPEUNPIVOT(HISTORY_ID FOR PERIOD IN (PERIOD_01, PERIOD_02, PERIOD_03))WHERE ID = 3
)

得到最终结果:
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部