आप एक निश्चित मान पर पिवट कर रहे हैं, स्ट्रिंग शाब्दिक '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
. का विश्लेषणात्मक योग प्राप्त करने के लिए उस क्वेरी को बदलते हैं और रूम/स्क्रैच मानों की रैंकिंग (और आधुनिक जॉइन सिंटैक्स का उपयोग करके) आपको मिलती है:
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 परिणाम न मिल जाए या क्वेरी गतिशील रूप से उत्पन्न न हो जाए।