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_TYPE
	UNPIVOT(
		HISTORY_ID FOR PERIOD IN (PERIOD_01, PERIOD_02, PERIOD_03)
	)
	WHERE ID = 3
)

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值