Оральное условное преобразование данных в строки и столбцы

У меня есть исходная таблица, которая приходит из приложения, как показано ниже,

ID  NAME PHONETYPE PHONENO   CUSTOMERID CUSTOMER NAME

1   Chris Work     1234567890  3        Sony
1   Chris Work     1234567890  4        TOM
1   Chris Mobile   0123456789  3        Sony
1   Chris Mobile   0123456789  4        TOM 
1   Chris  Fax     0000111111  3        Sony
1   Chris  Fax     0000111111  4        TOM 
2   Ryan  Work     1111122222  5        Mary
2   Ryan  Work     1111122222  6        Joe
2   Ryan  Mobile   2222233333  5        Mary
2   Ryan  Mobile   2222233333  6        Joe

Я хочу использовать данные исходной таблицы для вставки в целевую таблицу B, как показано ниже. Как видите, контактная информация сведена в столбцы, а информация о клиенте по-прежнему в форме строк. Как я могу добиться этого в Oracle SQL.

ID  NAME   WORKNO      MOBILENO    FAXNO       CUSTOMERID  CUSTOMERNAME
1   Chris 1234567890  0123456789   0000111111  3                Sony       
1   Chris 1234567890  0123456789   0000111111  4                Tom
2   Ryan  1111122222  2222233333   NULL        5                Mary
2   Ryan  1111122222  2222233333   NULL        6                Joe

1 ответ

Решение

Используйте условную логику и агрегируйте так:

 select id, name, max(case when phonetype='work' then phonno else null end) workno,
     max(case when phonetype='mobile' then phonno else null end) mobileno,
    max(case when phonetype='fax' then phonno else null end) faxno, customerid,
    [customer name]
    from yourtable group by id, name,customerid,
    [customer name]
Другие вопросы по тегам