gpt4 book ai didi

sql - 使用 PIVOT 函数 (Oracle) 的行到列

转载 作者:行者123 更新时间:2023-12-03 23:43:23 25 4
gpt4 key购买 nike

我正在尝试创建一个查询以使用 PIVOT 函数将行转换为列。我有一个这种形式的表格(这只是部分 View ,该表格包含 30 多列)。

ID      SUBJECT  GRADE
000442 WRI001 C-
000442 PHY104 C
000442 MTH111 B
000442 MTH111 W
000442 MTH111 W
000442 PHY104 W
预期结果:
ID      'WRI001'   'MTH111'   'PHY104'
000442 C- B,W,W C,W
使用的查询:
select * from (
select ID,
SUBJECT,GRADE
from SECOND_YEAR_COMP
)
pivot
(
MAX(GRADE)
for SUBJECT in
('MTH111',
'WRI001',
'PHY104')
);
查询输出:
ID      'WRI001'   'MTH111'   'PHY104'
000442 C- W W
我知道因为 MAX(GRADE),我每个科目都只有一个成绩。有没有办法获得该科目的所有成绩(正如我上面给出的预期结果)。

最佳答案

您可以使用 listagg()和条件聚合:

select id,
listagg(case when subject = 'WRI001' then grade end) WRI001,
listagg(case when subject = 'WRI001' then grade end) WRI001,
listagg(case when subject = 'PHY104' then grade end) PHY104
from second_year_comp
group by id
您可以使用 within group 控制成绩出现在串联字符串中的顺序。条款。假设您想按年级排序,然后:
select id,
listagg(case when subject = 'WRI001' then grade end) within group(order by grade) WRI001,
listagg(case when subject = 'WRI001' then grade end) within group(order by grade) WRI001,
listagg(case when subject = 'PHY104' then grade end) within group(order by grade) PHY104
from second_year_comp
group by id

关于sql - 使用 PIVOT 函数 (Oracle) 的行到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64390380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com