2013-08-29 5 views
-1

У меня есть таблица, как показано ниже:Как изменить строку на столбец?

Name  Org 
aaaa  bbb 
aaaa  bbbb 
aaaa  bbbbb 
bbbb  cccc 

Как я могу использовать оракул изменения SQL в формат ниже

Name Org1  Org2  Org3 
aaaa bbb  bbbb  bbbbb 
bbbb cccc 
+0

Какую версию Oracle вы используете? У вас будет ограниченное количество оргов для каждого имени? – Taryn

+0

Oracle 11 да. Я думаю, что 5 - это большинство орг, каждое имя может иметь – haoyun

ответ

1

Есть несколько способов, которые вы можете получить результат. Обе версии, которые я показываю, используют row_number(), чтобы помочь преобразовать строки в столбцы.

Вы можете использовать агрегатную функцию с выражением CASE-:

select 
    name, 
    max(case when seq = 1 then org end) org1, 
    max(case when seq = 2 then org end) org2, 
    max(case when seq = 3 then org end) org3, 
    max(case when seq = 4 then org end) org4, 
    max(case when seq = 5 then org end) org5 
from 
(
    select name, org, 
    row_number() over(partition by name 
         order by org) seq 
    from yourtable 
) d 
group by name; 

См SQL Fiddle with Demo. Или, так как вы используете Oracle 11g, вы можете использовать функцию PIVOT, чтобы преобразовать строки в столбцы:

select name, 
    Org1, 
    Org2, 
    Org3, 
    Org4, 
    Org5 
from 
(
    select name, org, 
    row_number() over(partition by name 
         order by org) seq 
    from yourtable 
) d 
pivot 
(
    max(org) 
    for seq in ('1' as Org1, '2' as Org2, 
       '3' as Org3, '4' as Org4, 
       '5' as Org5) 
) piv 

См SQL Fiddle with Demo. Оба дают результат:

| NAME | ORG1 | ORG2 | ORG3 | ORG4 | ORG5 | 
| aaaa | bbb | bbbb | bbbbb | (null) | (null) | 
| bbbb | cccc | (null) | (null) | (null) | (null) | 
+0

Большое спасибо – haoyun

0

Вы можете использовать PIVOT для достижения этой цели.

Что-то вроде this: -

select * 
from 
    (select fk_department 
    from employee) 
    pivot 
    (count(fk_department) 
     for fk_department in ('INT', 'WEL', 'CEN', 'POL')); 
+0

. Я не знаю, сколько отделов имеет aaaa. Что я должен использовать в «fk_department in (« INT »,« WEL »,« CEN »,« POL »))»? Большое спасибо! – haoyun

+0

Это всего лишь пример не фактического запроса, который вы должны использовать. Объяснение этого объясняется в ссылке, которую я поделил! –

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