Hilfe zu Oracle Select

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/hilfe-zu-oracle-select_258298/page_1 - zur Vollversion wechseln!


Umlüx schrieb am 06.07.2021 um 14:50

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

und suche ein SELECT nach "partner", welches mir die Daten so formatiert ausspucken würde:

Code:
partner email         telefon       adresse
------------------------------------------
1       not @home.at  +43132456789  daheimstrasse 9

ich wurschtel hier gerade schon mit IF und CASE herum, komm aber auf keinen grünen zweig.. wie kann ich das elegant lösen?


kleinerChemiker schrieb am 06.07.2021 um 15:08

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.


meepmeep schrieb am 06.07.2021 um 15:28

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       


Punisher schrieb am 07.07.2021 um 00:16

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

edit

bei fehlenden Daten ev die Joins durch outer joins ersetzen


berndy2001 schrieb am 07.07.2021 um 00:45

noch schneller und schmutziger:

Code:
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
http://sqlfiddle.com/#!4/120710/1


Umlüx schrieb am 07.07.2021 um 07:57

ah. ich verstehe worauf ihr da rauswollt.
danke!




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025