2012-05-15 4 views
0

У меня есть следующая таблицаsql pivot with oracle?

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

Какую версию Oracle? 10g, 11 и т. Д.? – xQbert

+0

Делает ли это какой-либо сбой? что-то общее для обоих? –

+0

Дело работает на обоих, 11 г. Я считаю, что функция центра и неволя аналитична; не уверен, если его в 10g или раньше. – xQbert

ответ

1

Простейший способ - исключить его из-за того, что кажется, что у вас есть конечное число p_names для заданного идентификатора.

Покушение 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 по имени и пути, я пытаюсь применить «группу», но пока не удался –

+0

Плохая установка логики. См. Попытку 2. – xQbert

+0

Спасибо, что :-) –

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'