【问题标题】:Pivot Dynamic columns Oracle 11g [duplicate]透视动态列 Oracle 11g [重复]
【发布时间】:2014-05-30 07:56:30
【问题描述】:

我有一张看起来像这样的桌子

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

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

我知道如何并且已经让枢轴工作,但不使用动态列。 如何使用 Dynamic 列透视表?

【问题讨论】:

  • 你看过PIVOT syntax吗?
  • 是的,我已经尝试过 technology.amis.nl/2006/05/24/… 我可以让枢轴工作但不能动态地工作
  • 那篇文章,如果你读过的话,使用了不属于标准 SQL 的对象...
  • 啊,我明白了,谢谢 Ben,我希望可以使用 Oracle 中的动态列进行旋转...
  • 它是...我已经关闭了这个作为告诉你如何的东西的副本。不过,真的值得一读文档。

标签: sql oracle oracle11g pivot dynamic-pivot


【解决方案1】:

您的查询应如下所示:

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

【讨论】:

  • 感谢 Emmanuel,但我的问题仍然是我不知道会有哪些模块,所以我无法对模块进行硬编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多