【问题标题】:Table Conversion- Oracle表转换 - Oracle
【发布时间】:2010-09-09 04:49:09
【问题描述】:

我有一个这样结构的表:

date  colname   value
----------------------------
date  col1name  col1's value  
date  col2name  col2's value  
date  col3name  col3's value  

现在我需要把它转换成这样的结构:

date col1name       col2name      col3name  
-----------------------------------------------
date col1's value   col2's value  col3's value  

有可能吗?

【问题讨论】:

  • @OMG 感谢您的编辑,这正是我所要求的。

标签: sql oracle plsql pivot sqlplus


【解决方案1】:

你想要一个数据透视表:

  SELECT t.date,
         MAX(CASE WHEN t.colname = 'col1name' THEN t.value END) AS col1name,
         MAX(CASE WHEN t.colname = 'col2name' THEN t.value END) AS col2name,
         MAX(CASE WHEN t.colname = 'col3name' THEN t.value END) AS col3name
    FROM TABLE t
GROUP BY t.date

如果您想根据 colname 值使其动态化,则需要使用 dynamic SQL,因为您需要在构造实际查询之前先获取 colname 值列表。

Oracle 直到 11g 才添加 PIVOT/UNPIVOT 支持。 9i+ 支持CASE 表达式;在 9i 之前,您必须使用 DECODE...

【讨论】:

  • 嗨小马们。感谢您的回复。但这不是关于顺序,而是关于展平之前的表格。即在您的答案中“导入数据”,我不知道该怎么做。
  • @sarahTheButterFly:当我看到你更改格式时更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2015-10-18
  • 2016-06-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 2022-10-21
相关资源
最近更新 更多