2010-09-09 100 views
0

我有一个表,这个结构:表转换 - 甲骨文

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 

这可能吗?

+0

@OMG感谢编辑,这正是我所要求的。 – sarahTheButterFly 2010-09-09 04:58:06

回答

2

你想要一个透视表:

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支持。 CASE表达式支持9i +;在9i之前,你必须使用DECODE ...

+0

嗨小马。感谢您的回复。但这不是关于秩序,而是关于平坦的前一张桌子。即在您的答案中“导入数据”,我不知道该怎么做。 – sarahTheButterFly 2010-09-09 04:55:30

+0

@sarahTheButterFly:当我看到您更改格式时更新。 – 2010-09-09 04:56:56

+0

是的,它的工作原理!谢谢! – sarahTheButterFly 2010-09-09 05:27:43