Du pivoterar på ett fast värde, den bokstavliga strängen 'RM'
, så du gör verkligen inget användbart i pivoten - utdata är densamma som du får om du kör "pivot_data"-frågan på egen hand:
SELECT eNAME,workhrs,room, SCR from PRODUCTIVITY p,PRODUCTIVITYd d, emp e, ROOMS R
where p.PRODUCTIVITYID=d.PRODUCTIVITYID and e.empno=p.employeeid
AND R.ID=P.ROOMID;
ENAME WORKHRS ROOM SCR
----- ---------- ---------- ----------
JONES 3.6 101 53
ALLEN 1.32 101 43
ALLEN 6 102 22
Du vill ha den sammanlagda workhrs
för varje anställd, och en pivot av rummen de sålde. Om du ändrar den frågan för att få den analytiska summan av workhrs
och en rangordning av rum/scr-värdena (och med modern join-syntax) får du:
select e.ename, r.room, p.scr,
sum(d.workhrs) over (partition by e.ename) as wrkhrs,
rank() over (partition by e.ename order by r.room, p.scr) as rnk
from productivity p
join productivityd d on d.productivityid = p.productivityid
join emp e on e.empno=p.employeeid
join rooms r on r.id = p.roomid;
ENAME ROOM SCR WRKHRS RNK
----- ---------- ---------- ---------- ----------
ALLEN 101 43 7.32 1
ALLEN 102 22 7.32 2
JONES 101 53 3.6 1
Du kan sedan pivotera på den genererade rnk
nummer:
with pivot_data as (
select e.ename, r.room, p.scr,
sum(d.workhrs) over (partition by e.ename) as wrkhrs,
rank() over (partition by e.ename order by r.room, p.scr) as rnk
from productivity p
join productivityd d on d.productivityid = p.productivityid
join emp e on e.empno=p.employeeid
join rooms r on r.id = p.roomid
)
select *
from pivot_data
pivot (
min(room) as room, min(scr) as scr --<-- pivot_clause
for rnk --<-- pivot_for_clause
in (1, 2, 3) --<-- pivot_in_clause
);
ENAME WRKHRS 1_ROOM 1_SCR 2_ROOM 2_SCR 3_ROOM 3_SCR
----- ---------- ---------- ---------- ---------- ---------- ---------- ----------
ALLEN 7.32 101 43 102 22
JONES 3.6 101 53
Du måste veta det maximala antalet rum en anställd kan ha - det vill säga den högsta rnk
någonsin skulle kunna vara - och inkludera alla dessa i in
klausul. Vilket betyder att du sannolikt kommer att sluta med tomma kolumner, som i det här exemplet där det inte finns någon data för 3_room
eller 3_scr
. Du kan dock inte undvika det om du inte får ett XML-resultat eller genererar frågan dynamiskt.