1

我是 Oracle 的新手,但以前曾在 mysql 上工作过。我们已将数据库从 mysql 迁移到 oracle,在这种情况下需要帮助。

我在 oracle 10g 中有表格,格式如下:

student_id  student_key student_value
----------  ----------- -------------
         1  name        john
         2  name        bill
         1  age         28
         2  age         26
         2  result      pass

现在我想在它上面创建一个支点,所以我使用以下查询:

select student_id, decode(student_key, 'name', student_Value, null) as  studentName
from student_table

输出为

student_id studentName
---------- -----------
1          john
1          null
2          bill
2          null
2          null
4

1 回答 1

2

Oracle 11 有专门PIVOT的功能(这里有一个很好的介绍),但 10g 没有。以下是如何在 10g 中执行此操作:

SELECT
  student_id,
  MAX(CASE WHEN student_key = 'name' THEN student_value END) AS StudentName,
  MAX(CASE WHEN student_key = 'age' THEN student_value END) AS Age,
  MAX(CASE WHEN student_key = 'result' THEN student_value END) AS Result
FROM myTable
GROUP BY student_id

与 OraclePIVOT命令一样,您需要提前知道输出列的数量。

另请注意,MAX使用它是因为我们将行滚动到列,这意味着我们必须分组,这意味着我们需要一个聚合函数,为什么不MAX呢?如果你使用MIN而不是MAX你会得到相同的结果。

于 2013-08-13T13:46:53.357 回答