Pivot动态列Oracle 11g

时间:2014-05-30 07:56:30

标签: sql oracle oracle11g pivot dynamic-pivot

我有一个看起来像这样的表

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

我的问题是我不知道会有多少个模块

我知道如何使用枢轴工作但不能使用动态列。 如何使用动态列旋转我的表格?

1 个答案:

答案 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 ......是的,有时候生活很糟糕。)