#sql #oracle
Подскажите пожалуйста, есть таблица, телефонный справочник: FIO |type |Ph | Иванов Семен Павлович |Внутр|11-11-11| Иванов Семен Павлович |Внешн|3056 | Сидоров Петр Евгеньевич|Внутр|22-22-22| Сидоров Петр Евгеньевич|Внешн|4067 | Как вывести такую таблицу SQL запросом? FIO |PH1 |PH2 Иванов Семен Павлович |11-11-11|3056 Сидоров Петр Евгеньевич|22-22-22|4067
Ответы
Ответ 1
SELECT t1.FIO as FIO, t1.Ph as PH1, t2.Ph as PH2 FROM ( SELECT FIO, Ph FROM WHERE type = 'Внутр' ) AS t1 FULL OUTER JOIN ( SELECT FIO, Ph FROM
Ответ 2
Например так: select a.fio, (select b.ph from table b where a.fio = b.fio and b.type = 'Внутр'), (select b.ph from table b where a.fio = b.fio and b.type = 'Внешн') from table a group by a.fio
Ответ 3
В MySQL можно так select FIO, GROUP_CONCAT(case when type='Внутр' then Ph else '' end) PH1, GROUP_CONCAT(case when type='Внешн' then Ph else '' end) PH2 from ... group by FIO в Oracle должно что то быть похожее, тут например
Ответ 4
так ни кто и не написал про PIVOT, коменты не в счет with s (fio, typ, ph) as (select 'Иванов Семен Павлович' , 'Внутр' , '11-11-11' from dual union all select 'Иванов Семен Павлович' , 'Внеш' , '3056' from dual union all select 'Сидоров Петр Евгеньевич' , 'Внутр' , '22-22-22' from dual union all select 'Сидоров Петр Евгеньевич' , 'Внеш' , '4067' from dual ) , rez as (select * from (select s.fio , s.typ as k , s.ph as val from s ) pivot (min(val) fro k in ('Внутр','Внеш')) ) select * from rez
Ответ 5
select FIO ,max(case when type = 'Внутр' then Ph else NULL end) Ph1 ,max(case when type = 'Внешн' then Ph else NULL end) Ph2 from t1 group by FIO
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий