Проверьте, помогает ли это -
http://sqlfiddle.com/#!4/30ebb/10/0
CREATE TABLE person
("person_id" int, "name" varchar2(9))
;
INSERT ALL
INTO person ("person_id", "name")
VALUES (1, '''Abcd''')
INTO person ("person_id", "name")
VALUES (2, '''xyz''')
INTO person ("person_id", "name")
VALUES (3, '''jjjjj''')
INTO person ("person_id", "name")
VALUES (4, '''sfds''')
INTO person ("person_id", "name")
VALUES (5, '''temp''')
SELECT * FROM dual
;
CREATE TABLE accounts
("personID" int, "accountType" int, "balance" int)
;
INSERT ALL
INTO accounts ("personID", "accountType", "balance")
VALUES (1, 1, 100)
INTO accounts ("personID", "accountType", "balance")
VALUES (1, 2, 150)
INTO accounts ("personID", "accountType", "balance")
VALUES (2, 1, 20)
INTO accounts ("personID", "accountType", "balance")
VALUES (3, 1, 40)
INTO accounts ("personID", "accountType", "balance")
VALUES (3, 2, 440)
INTO accounts ("personID", "accountType", "balance")
VALUES (4, 1, 600)
INTO accounts ("personID", "accountType", "balance")
VALUES (5, 1, 43)
INTO accounts ("personID", "accountType", "balance")
VALUES (5, 2, 50)
SELECT * FROM dual
;
Запрос -
select * from (
select p."person_id", a."accountType", a."balance"
from person p, accounts a
where p."person_id" = a."personID"
)
pivot (sum("balance") for "accountType" in (1 as acc_type1_bal,2 as acc_type2_bal));
person_id ACC_TYPE1_BAL ACC_TYPE2_BAL
1 100 150
2 20 (null)
4 600 (null)
5 43 50
3 40 440