2012-05-15 83 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'