2016-04-01 26 views
0

Ich habe 3 Tabellen: Tabelle_A, Tabelle_B und Tabelle_C. Tabelle_A hat einen Primärschlüssel und wird von einem Fremdschlüssel aus Tabelle_B referenziert. Tabelle C hat einen Primärschlüssel, auf den von einem Fremdschlüssel aus Tabelle B verwiesen wird. Das Design ist wie folgt aus:So verwenden Sie eine Bedingung auf Listagg auf Oracle-Abfrage

Table_A: ID_A TextData

Table_B: ID_B ID_A ID_C

Table C: ID_C TextData

die Abfrage:

select a.id_a, a.textdata, listagg(c.textdata, ', ') within group (order by c.id_c) data_c from table_a a inner join table_b b on (a.id_a = b.id_a) inner join table_c c on (b.id_c = c.id_c) where c.textdata like :data group by a.id_a, a.textdata;

ich nur Daten aus einer Tabelle von c.textdata bekommen, nicht von Listagg. Wenn ich versuche, diese Abfrage verwenden:

select a.id_a, a.textdata, listagg(c.textdata, ', ') within group (order by c.id_c) data_c from table_a a inner join table_b b on (a.id_a = b.id_a) inner join table_c c on (b.id_c = c.id_c) where listagg(c.textdata, ', ') like :data group by a.id_a, a.textdata;

Ich erhalte eine Fehlermeldung wie: Gruppenfunktion nicht hier erlaubt ist

Wie eine Bedingung auf listagg Parameter zu geben, weil ich die Daten müssen aus Listagg?

Antwort

1

können Sie versuchen, Ihre Anfrage Verpackung:

select * 
from (
     select a.id_a, 
      a.textdata, 
      listagg(c.textdata, ', ') within group (order by c.id_c) data_c 
     from table_a a 
      inner join table_b b on (a.id_a = b.id_a) 
      inner join table_c c on (b.id_c = c.id_c) 
     group by a.id_a, a.textdata 
    ) 
where data_c like :data 

oder HAVING unter Verwendung von Bedingungen auf dem Feld von LISTAGG gebaut anzuwenden:

select a.id_a, 
     a.textdata, 
     listagg(c.textdata, ', ') within group (order by c.id_c) data_c 
from table_a a 
     inner join table_b b on (a.id_a = b.id_a) 
     inner join table_c c on (b.id_c = c.id_c) 
group by a.id_a, a.textdata 
having listagg(c.textdata, ', ') within group (order by c.id_c) like :data 
+0

ich versucht habe die Abfrage auszuführen und ich bekomme das Ergebnis wie dies: "data_c": ungültiger Bezeichner – user3505775

+0

Es tut mir leid, ich habe einen falschen Zustand. Danke für Ihre Unterstützung: D – user3505775

Verwandte Themen