2011-12-20 63 views
2

我知道轉置(或數據透視)w/sql是一個常見問題,但我一直無法完全達到我想要在堆棧/谷歌上執行的操作。基於列值的oracle轉置

簡而言之,我希望在沒有硬編碼列的所有可能值的情況下,因爲這些值可能很多和/或隨時間而改變。例如,

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

的目標是與單行爲每個不同的ID拉閘,與列每個不同的山坳

很容易的在山坳的值是靜態的,小的,但是當有在案例陳述中硬編碼每個可能的子句似乎都很艱難。

在僞代碼

,我想做的事是

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實現這一目標。

建議?

回答

0

什麼版本的Oracle? 11g引入樞命令

逸岸,就看這裏既使用轉動命令,而不是: http://orafaq.com/wiki/PIVOT

+0

對不起,9I。我沒有支點。 – 2011-12-20 19:34:41

+0

@justincress - 然後,正如postesd鏈接所說的,您正在使用CASE/DECODE版本。如果您需要將300行旋轉爲300列,則需要300個CASE/DECODE語句。抱歉。 – MatBailie 2011-12-20 19:38:50