आप विंडो फ़ंक्शंस और सशर्त एकत्रीकरण का उपयोग कर सकते हैं:
select
rn,
max(case when occupation = 'Doctor' then name end) doctor,
max(case when occupation = 'Singer' then name end) singer,
max(case when occupation = 'Actor' then name end) actor
from (
select t.*, row_number() over(partition by occupation order by name) rn
from mytable t
)
group by rn
सबक्वेरी नाम से एक ही व्यवसाय करने वाले व्यक्तियों को रैंक करती है। फिर आप उस जानकारी का उपयोग पंक्तियों को उत्पन्न करने के लिए कर सकते हैं, और सशर्त समुच्चय के साथ प्रत्येक व्यवसाय के लिए संबंधित नाम तक पहुंच सकते हैं।
खिड़की के कार्यों के बिना, यह अलग है। यदि आपका डेटा बहुत बड़ा नहीं है, तो एक विकल्प एक सबक्वेरी के साथ पंक्ति संख्या का अनुकरण करता है:
select
rn,
max(case when occupation = 'Doctor' then name end) doctor,
max(case when occupation = 'Singer' then name end) singer,
max(case when occupation = 'Actor' then name end) actor
from (
select t.*,
(
select count(*)
from mytable t1
where t1.occupation = t.occupation and t1.name <= t.name
) rn
from mytable t
)
group by rn