यदि आप गारंटी देते हैं कि आपके स्रोत तालिका में डेटा इस विशेष क्रम में होगा तो आप वांछित परिणाम प्राप्त करने के लिए एक समान क्वेरी लिख सकते हैं:
-- sample of data from your question
SQL> with t1(col) as(
2 select 'Scott' from dual union all
3 select '100' from dual union all
4 select '10' from dual union all
5 select 'Miller' from dual union all
6 select '200' from dual union all
7 select '20' from dual union all
8 select 'Mike' from dual union all
9 select '300' from dual union all
10 select '30' from dual union all
11 select 'Allen' from dual union all
12 select '400' from dual union all
13 select '40' from dual
14 ) -- the query
15 select max(decode(mod(rownum - 1, 3), 0, col)) as name
16 , max(decode(mod(rownum - 1, 3), 1, col)) as sal
17 , max(decode(mod(rownum - 1, 3), 2, col)) as depno
18 from t1
19 group by trunc((rownum -1)/ 3)
20 /
NAME SAL DEPNO
------ ------ ------
Miller 200 20
Mike 300 30
Allen 400 40
Scott 100 10
परिशिष्ट
इसके लिए आपको कर्सर की आवश्यकता नहीं है (जब तक कि यह किसी प्रकार की विशेष आवश्यकता न हो जो कर्सर के उपयोग की मांग करे)। डेटा के साथ अन्य तालिका को पॉप्युलेट करने के लिए आप बस INSERT INTO ... SELECT
. का उपयोग कर सकते हैं :
insert into temp_process(name, sal, depno)
select max(decode(mod(rownum - 1, 3), 0, col))
, max(decode(mod(rownum - 1, 3), 1, col))
, max(decode(mod(rownum - 1, 3), 2, col))
from table_a
group by trunc((rownum -1)/ 3)