आपने RDBMS निर्दिष्ट नहीं किया, लेकिन यह मूल रूप से एक pivot
है यदि आपके डेटाबेस के पास उस फ़ंक्शन तक पहुंच है। यदि नहीं, तो आप case
. का उपयोग करके दोहरा सकते हैं और एक समग्र कार्य।
<स्ट्राइक>MySQL :स्ट्राइक>
select name,
sum(case when group_rn = 1 then amount else 0 end) Amount1,
sum(case when group_rn = 2 then amount else 0 end) Amount2,
sum(case when group_rn = 3 then amount else 0 end) Amount3
from
(
select name,
@num := if(@name = `name`, @num + 1, 1) as group_rn,
@name := `name` as dummy,
amount
from
(
select p.name,
d.amount,
d.decl_id
from person p
inner join declaration d
on p.person_id = d.person_id
) src
order by name
) p
group by name
देखें SQL Fiddle with Demo
SQL सर्वर और Oracle में PIVOT
फ़ंक्शन मौजूद है:
एसक्यूएल सर्वर :
select name,
[1] as Amount1,
[2] as Amount2,
[3] as Amount3
from
(
select p.name,
d.amount,
row_number() over(partition by p.name order by d.amount) rn
from person p
inner join declaration d
on p.person_id = d.person_id
) src
pivot
(
sum(amount)
for rn in ([1], [2], [3])
) p
देखें SQL Fiddle with Demo
आप गतिशील संस्करण बना सकते हैं, यदि आपके पास अज्ञात संख्या में राशियाँ हैं जिन्हें आप कॉलम में बदलना चाहते हैं।
संपादित करें, आपने कहा है कि आप Oracle का उपयोग कर रहे हैं, इसलिए oracle विशिष्ट उत्तर नीचे हैं:
ओरेकल 11g में pivot
है समारोह:
select name,
Amount1,
Amount2,
Amount3
from
(
select p.name,
d.amount,
row_number() over(partition by p.name order by d.amount) rn
from person p
inner join declaration d
on p.person_id = d.person_id
) src
pivot
(
sum(amount)
for rn in ('1' as Amount1, '2' as Amount2, '3' as Amount3)
) p
देखें SQL Fiddle with Demo
यदि आप Oracle 11g पर नहीं हैं, तो आपको CASE
. का उपयोग करने की आवश्यकता होगी समग्र कार्य के साथ:
select name,
sum(case when rn = 1 then amount else 0 end) Amount1,
sum(case when rn = 2 then amount else 0 end) Amount2,
sum(case when rn = 3 then amount else 0 end) Amount3
from
(
select p.name,
d.amount,
row_number() over(partition by p.name order by d.amount) rn
from person p
inner join declaration d
on p.person_id = d.person_id
) src
group by name
देखें SQL Fiddle with Demo