2012-05-15 82 views
0

我有以下表與Oracle的SQL數據透視表?

ID p_name  p_value 
    ---- ------  -------------- 
    1  name  index.htm 
    1  path  c:\web\site1 
    1  size  400 
    1  date  2011-03-12 
    1  note  'test site' 
    2  name  login.htm 
    2  path  c:\web\site1 
    2  size  500 
    ... ...  ... 
    ... ...  ... 

我需要使它看起來像這樣

ID Name   Path 
    --- ---------- ------------- 
    1  index.htm c:\web\site1 
    2  login.htm c:\web\site1 
    ... ...   ... 

我讀一些其他職位,但我無法弄清楚如何把它在我的例子! 我只需要主要是「名稱」和「路徑」,我可以在需要時添加其他人!

+0

甲骨文的什麼版本? 10g,11等? – xQbert

+0

它有任何差異嗎?兩者都有共同的工作? –

+0

兩種情況都適用,11g我相信有一個關鍵點和unpivot函數分析;不知道它是否在10g或之前。 – xQbert

回答

1

最簡單的方法是將其解出來,因爲對於給定的ID,似乎您的p_name數量有限。

嘗試2 - 修訂

Select ID, T1.P_Name as Name, T2.P_value as Path 
FROM YourTableName T1 
INNER JOIN yourTableName T2 
    ON T1.ID = T2.ID 
    and T1.P_Name = 'name' 
    and T2.P_name = 'path' 

嘗試1 - 大錯

SELECT Id, 
CASE p_name when 'name' THEN P_value end as Name, 
CASE p_name when 'path' THEN p_value end as Path 
FROM yourTableNameHere 
+0

這很好,但是我得到的名稱和路徑上有許多NULL的分配ID,我試圖應用「group by」,但沒有運氣 –

+0

壞集邏輯請參閱嘗試2. – xQbert

+0

謝謝allot :-) –

1
select t1.id, t1.p_value name, t2.p_value path 
    from mytable t1, mytable t2 
where t1.id = t2.id 
    and t1.p_name = 'name' 
    and t2.p_name = 'path'