Du pivoterer på en fast værdi, den bogstavelige streng 'RM'
, så du gør virkelig ikke noget nyttigt i pivoten - outputtet er det samme, som du ville få ved at køre 'pivot_data'-forespørgslen alene:
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 vil have de samlede workhrs
for hver medarbejder, og en pivot af de lokaler, de solgte. Hvis du ændrer den forespørgsel for at få den analytiske sum af workhrs
og en rangering af rum/scr-værdierne (og ved hjælp af moderne joinsyntaks) 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 derefter pivotere på den genererede 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 skal kende det maksimale antal værelser, enhver medarbejder må have - dvs. den højeste rnk
nogensinde kunne være - og inkludere alle dem i in
klausul. Hvilket betyder, at du sandsynligvis ender med tomme kolonner, som i dette eksempel, hvor der ikke er nogen data for 3_room
eller 3_scr
. Du kan dog ikke undgå det, medmindre du får et XML-resultat eller genererer forespørgslen dynamisk.