我有一个看起来像这样的表
StudentNr Module MarkAchieved
123 Task1 59
123 Task2 49
123 Exam1 62
854 Task1 71
854 Task2 72
854 Exam1 90
785 Task1 41
785 Task2 53
785 Exam1 60
我希望像这样显示
StudentNr Task1 Task2 Exam1
123 59 49 62
854 71 72 90
785 41 53 60
我的问题是我不知道会有多少个模块
我知道如何使用枢轴工作但不能使用动态列。 如何使用动态列旋转我的表格?
答案 0 :(得分:0)
以下是您的查询应如下所示:
select *
from
(
select * from t
)
pivot (max(MarkAchieved) for (Module) in ('Task1' as task1, 'Task2' as task2, 'Exam1' as exam1))
;
这给出了:
STUDENTNR TASK1 TASK2 EXAM1
123 59 49 62
785 41 53 60
854 71 72 90
现在,Oracle 11g中PIVOT
子句的问题是你必须明确枚举所有可能的值......这是一个限制,PIVOT XML
子句没有例如(但它会产生XML ......是的,有时候生活很糟糕。)