Оральное условное преобразование данных в строки и столбцы
У меня есть исходная таблица, которая приходит из приложения, как показано ниже,
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]