Функция Oracle Pivot
Как развернуть столбец в строку?
Для этого в Oracle SQL начиная с версии 11g есть специальная функция pivot.
Пример.
Для этого в 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, она наоборот развернет строку в столбец.
ещё один пример
ещё один пример
SELECT * FROM (SELECT job, deptno, sum(sal) sal FROM emp GROUP BY job, deptno) PIVOT ( sum(sal) FOR deptno IN (10, 20, 30, 40) ); JOB 10 20 30 40 --------- ---------- ---------- ---------- ---------- CLERK 1300 1900 950 SALESMAN 5600 PRESIDENT 5000 MANAGER 2450 2975 2850 ANALYST 6000
Немає коментарів:
Дописати коментар