oracle基于列值进行转置

时间:2011-12-20 19:20:53

标签: sql oracle

我知道转换(或数据透视)w / s是一个常见的问题,但我无法完全达到我想要在堆栈/谷歌上做的事情。

简而言之,我想要/然后不用硬编码列的所有可能值的情况,因为这些值可能很多和/或随时间变化。例如,

id col val
1  a   65
1  b   34
1  c   25
2  a   67
2  c   22
...

目标是为每个不同的ID结束一行,每个不同的列

当col的值是静态的和小的时候很容易,但是当有几十个这样的值时,在case语句中对每个可能的子句进行硬编码似乎很难。

在psuedo代码中,我想要做的是

select
for each attr in (select distinct col from table)
sum(case when col = attr then val end) as transposed_attr,
end for
from table
group by id

但我对PL / SQL缺乏经验,所以我不知道如何在oracle中实现这一点。

么?

1 个答案:

答案 0 :(得分:0)

什么版本的Oracle? 11g介绍了pivot命令......

事实上,只是看这里使用PIVOT命令而不是:   http://orafaq.com/wiki/PIVOT