Oracle Pivot query gives columns with quotes around the column names. What?
you can provide aliases to the new columns in the pivot
statement's IN
clause. (NB: This is different from the standard where clause IN()
which does not allow aliases.)
with testdata as( select 'Fred' First_Name, 10 Items from dual union select 'John' First_Name, 5 Items from dual union select 'Jane' First_Name, 12 Items from dual union select 'Fred' First_Name, 15 Items from dual)select * from testdatapivot ( sum(Items) for First_Name in ('Fred' as fred,'John' as john,'Jane' as jane) )
and also for your aggregate clause which is necessary if you have multiple clauses..
with testdata as( select 'Fred' First_Name, 10 Items from dual union select 'John' First_Name, 5 Items from dual union select 'Jane' First_Name, 12 Items from dual union select 'Fred' First_Name, 15 Items from dual)select * from testdatapivot ( sum(Items) itmsum, count(Items) itmcnt for First_Name in ('Fred' as fred,'John' as john,'Jane' as jane) )
returns
FRED_ITMSUM FRED_ITMCNT JOHN_ITMSUM JOHN_ITMCNT JANE_ITMSUM JANE_ITMCNT----------- ----------- ----------- ----------- ----------- ----------- 25 2 5 1 12 1
Of course you can then go full circle and use standard oracle aliasing and rename them to whatever you like including putting quotes back in again..
with testdata as( select 'Fred' First_Name, 10 Items from dual union select 'John' First_Name, 5 Items from dual union select 'Jane' First_Name, 12 Items from dual union select 'Fred' First_Name, 15 Items from dual)select FRED_ITMSUM "Fred's Sum", FRED_ITMCNT "Fred's Count" , JOHN_ITMSUM "John's Sum", JOHN_ITMCNT "John's Count" , JANE_ITMSUM "Janes's Sum", JANE_ITMCNT "Janes's Count"from testdatapivot ( sum(Items) itmsum, count(Items) itmcnt for First_Name in ('Fred' as fred,'John' as john,'Jane' as jane) )
gives
Fred's Sum Fred's Count John's Sum John's Count Janes's Sum Janes's Count---------- ------------ ---------- ------------ ----------- ------------- 25 2 5 1 12 1