Функция Oracle SQL Pivot. Разворот столбцов
Статьи про Oracle -> Программирование
Функция Oracle SQL Pivot. Разворот столбцов
v:1.0 03.08.2014
Петрелевич Сергей
При подготовке данных для отчетов иногда надо развернуть столбец в строку.
Для этого в Oracle SQL начиная с версии 11g есть специальная функция pivot.
Рассмотрим пример.
--Создаем тестовую таблицу и наполняем ее данными create table tDateValue ( dateV varchar2(50), value number ); insert into tDateValue(dateV,value) values('2013.08',80); insert into tDateValue(dateV,value) values('2013.08',1); insert into tDateValue(dateV,value) values('2013.08',2); insert into tDateValue(dateV,value) values('2013.09',90); insert into tDateValue(dateV,value) values('2013.09',1); insert into tDateValue(dateV,value) values('2013.09',2); insert into tDateValue(dateV,value) values('2013.10',100); insert into tDateValue(dateV,value) values('2013.10',1); insert into tDateValue(dateV,value) values('2013.10',2); insert into tDateValue(dateV,value) values('2013.10',3); insert into tDateValue(dateV,value) values('2013.11',110); insert into tDateValue(dateV,value) values('2013.11',1); insert into tDateValue(dateV,value) values('2013.11',2); insert into tDateValue(dateV,value) values('2013.12',120); insert into tDateValue(dateV,value) values('2013.12',1); insert into tDateValue(dateV,value) values('2013.12',2); commit; --допустим, требуется сгруппировать данные по датам select tDV.Datev, sum(tDV.Value) as summa from tDateValue tDV group by tDV.Datev --получим следущее: DATEV summa 2013.09 93 2013.11 113 2013.08 83 2013.10 106 2013.12 123 --однако, получившийся результат не очень наглядный, и хочется развернуть столбец в строку. select * from ( select tDV.Datev, tDV.Value from tDateValue tDV ) pivot ( sum(Value) for Datev in ('2013.08' as "2013.08",'2013.09' as "2013.09", '2013.10' as "2013.10",'2013.11' as "2013.11", '2013.12' as "2013.12") ) -- получится так: 2013.08 2013.09 2013.10 2013.11 2013.12 83 93 106 113 123
Для функции pivot есть обратная функция unpivot, она наоборот развернет строку в столбец.
Метки: SQL
Комментарии.
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.