固定値、文字列リテラル'RM'
を軸にしています 、したがって、ピボットで役立つことは何もしていません。出力は、「pivot_data」クエリを単独で実行した場合と同じです。
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
集約されたworkhrs
が必要です 各従業員のために、そして彼らが売った部屋の要点。そのクエリを変更して、workhrs
の分析合計を取得する場合 そして、あなたが得る部屋/ scr値のランキング(そして最新の結合構文を使用して):
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
次に、生成されたrnk
をピボットできます。 番号:
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
従業員が持つことができる部屋の最大数、つまり最大のrnk
を知る必要があります。 可能性があります-そしてそれらすべてをin
に含める 句。つまり、3_room
のデータがないこの例のように、列が空になる可能性があります。 または3_scr
。ただし、XML結果を取得するか、クエリを動的に生成しない限り、これを回避することはできません。