URL: https://www.overclockers.at/coding-stuff/hilfe-zu-oracle-select_258298/page_1 - zur Vollversion wechseln!
Ich habe eine Oracle Tabelle die simplifiziert so aussieht:
Code:id partner type value ------------------------- 1 1 1 +43132456789 2 1 2 not @home.at 3 1 4 daheimstrasse 9
Code:partner email telefon adresse ------------------------------------------ 1 not @home.at +43132456789 daheimstrasse 9
Ich bin nicht so bei Oracle daheim, aber wäre das nicht was für SELECT PIVOT? Eventuell mit einem JOIN auf eine Tabelle die dem Type einen Namen gibt.
reicht schnell und schmutzig?
Code:drop table partner; create table PARTNER( id number, type number, value varchar2(20char) ); insert into partner values (1, 1, '+43132456789'); insert into partner values (1, 2, 'not @home.at'); insert into partner values (1, 4, 'daheimstrasse 9'); insert into partner values (2, 1, '123'); insert into partner values (2, 2, 'yes @home.at'); insert into partner values (2, 4, 'entenhausen'); select p.id, phone.value as phone, mail.value as mail, addr.value as addr from partner p join partner phone on (p.id = phone.id and phone.type = 1) join partner mail on (p.id = mail.id and mail.type = 2) join partner addr on (p.id = addr.id and addr.type = 4) group by p.id, phone.value, mail.value, addr.value; ID PHONE MAIL ADDR ---------- -------------------- -------------------- -------------------- 1 +43132456789 not @home.at daheimstrasse 9 2 123 yes @home.at entenhausen
Da find ich einen join über subselects schöner
Code:create table partnercontact (id integer, partner integer, type integer, value varchar(100)); insert into partnercontact (id, partner, type, value) values (1, 1, 1, '+43132456789'); insert into partnercontact (id, partner, type, value) values (2, 1, 2, 'not @home.at'); insert into partnercontact (id, partner, type, value) values (3, 1, 4, 'daheimstrasse 9'); insert into partnercontact (id, partner, type, value) values (1, 2, 1, '+43242346789'); insert into partnercontact (id, partner, type, value) values (2, 2, 2, 'test@test.at'); insert into partnercontact (id, partner, type, value) values (3, 2, 4, 'test 9'); select tels.partner, tels.tel, addrs.addr, emails.email from (select value as tel, partner from partnercontact where type = 1) tels JOIN (select value as addr, partner from partnercontact where type = 2) addrs ON tels.partner = addrs.partner JOIN (select value as email, partner from partnercontact where type = 4) emails ON tels.partner = emails.partner
noch schneller und schmutziger:
http://sqlfiddle.com/#!4/120710/1Code:select distinct id, (select value from partner b where type = 1 and a.id = b.id) tel, (select value from partner b where type = 2 and a.id = b.id) mail, (select value from partner b where type = 4 and a.id = b.id) street from partner a order by 1
ah. ich verstehe worauf ihr da rauswollt.
danke!
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025