Nie określiłeś RDBMS, ale jest to w zasadzie pivot
jeśli Twoja baza danych ma dostęp do tej funkcji. Jeśli nie, możesz wykonać replikację za pomocą case
i funkcja agregująca.
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
Zobacz Skrzypce SQL z wersją demonstracyjną
W SQL Server i Oracle PIVOT
funkcja istnieje:
Serwer SQL :
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
Zobacz Skrzypce SQL z wersją demonstracyjną
Możesz tworzyć wersje dynamiczne, jeśli masz nieznaną liczbę kwot, które chcesz zamienić w kolumny.
Edytuj, stwierdziłeś, że korzystasz z Oracle, więc odpowiedzi dotyczące Oracle znajdują się poniżej:
Wyrocznia 11g ma pivot
funkcja:
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
Zobacz Skrzypce SQL z wersją demonstracyjną
Jeśli nie korzystasz z Oracle 11g, musisz użyć CASE
z funkcją agregującą:
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
Zobacz Skrzypce SQL z wersją demonstracyjną