2017-03-04 29 views
0

Für jeden Hund möchte ich die passenden Namen anderer Tiere neben Hund finden, und fügen Sie sie in einer durch Komma getrennten Liste. Bilder von Tisch und die gewünschten Ergebnisse der Abfrage unter:listagg Oracle SQL Query, beitreten in der gleichen Tabelle

Eine Tabelle mit dieser Struktur besteht: enter image description here

Und ich möchte eine Abfrage mit Ergebnissen erstellen, wie: enter image description here

+0

Bitte lesen http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload -Bilder-von-Code-auf-so-wenn-eine-Frage/285557 und die akzeptierte Antwort –

Antwort

0

Sie können ein verwenden und dann eine listagg.

select tdog.animal,tdog.name 
,listagg(tother.animal||'-'||tother.name||'-'||tother.id) within group(order by tother.id) 
from tablename tdog 
join tablename tother on tdog.name=tother.name and tdog.animal='dog' and tother.animal <> 'dog' 
group by tdog.animal,tdog.name 
0

Mit einigen Tricks, Sie brauchen kein self join:

select 'dog' as animal, name, 
     listagg(case when animal <> 'dog' then animal || '-' || name || '-' || id 
       end), ',') within group (order by id) as animals 
from t 
group by name 
having sum(case when animal = 'dog' then 1 else 0 end) > 0