René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
Pivot queries with Oracle | ||
drop table t_; create table t_ ( nm Varchar2(20), pr Char ( 7), vl Number ); insert into t_ values ('company 1','2003-06', 10); insert into t_ values ('company 1','2003-07', 29); insert into t_ values ('company 1','2003-08', 39); insert into t_ values ('company 1','2003-09', 41); insert into t_ values ('company 1','2003-10', 22); insert into t_ values ('company 2','2003-06', 13); insert into t_ values ('company 2','2003-07', 17); insert into t_ values ('company 2','2003-08', 61); insert into t_ values ('company 2','2003-09', 55); insert into t_ values ('company 2','2003-10', 71); insert into t_ values ('company 3','2003-06', 33); insert into t_ values ('company 3','2003-07', 18); insert into t_ values ('company 3','2003-08', 27); insert into t_ values ('company 3','2003-09', 5); insert into t_ values ('company 3','2003-10', 32); select nm, jul, aug, sep, jul+aug+sep "Total" from ( select nm, max(case when pr='2003-07' then vl else null end) jul, max(case when pr='2003-08' then vl else null end) aug, max(case when pr='2003-09' then vl else null end) sep from t_ group by nm);
This query returns:
NM JUL AUG SEP Total -------------------- ---------- ---------- ---------- ---------- company 1 29 39 41 109 company 2 17 61 55 133 company 3 18 27 5 50
See also pivot with pipelined functions and the pivot clause for an alternative ways to achieve
pivot queries.
|