2011-12-20 3 views
2

Я знаю, что транспонирование (или поворот) w/sql является обычным вопросом, но я не смог точно определить, что я пытаюсь сделать в стек/google.oracle transpose на основе значений столбцов

Короче говоря, я хочу случай, когда/then без hardcoding все возможные значения столбца, потому что эти значения могут быть многочисленными и/или меняться со временем. Например,

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

цель состоит в том, чтобы свернуть с одной строкой для каждого отдельного идентификатора, с колоннами для каждой отдельной седловины

достаточно легко, когда значение цв являются статическим и небольшим, но когда десятки таких значений жестко кодируют каждый возможный пункт в заявлении дела, кажется трудным.

в псевдо коде, что я хочу сделать, это

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, так что я не знаю, как добиться этого в оракула.

Рекомендации?

ответ

0

Какая версия Oracle? 11g вводит команду поворота ...

Infact, просто посмотрите здесь как с помощью команды PIVOT и не: http://orafaq.com/wiki/PIVOT

+0

извините, 9i. У меня нет стержня. –

+0

@justincress - Тогда, как говорится в сообщении postesd, вы попадаете в версию CASE/DECODE. И если вам нужно повернуть 300 строк на 300 столбцов, вам потребуются 300 операторов CASE/DECODE. Сожалею. – MatBailie

Смежные вопросы