2016-05-07 18 views
2

Die Spalte good_name ist null für alle Ergebnisse. Was ist ein Problem in der Abfrage?Oracle Listagg-Funktion gibt null zurück

select fp.id, 
    listagg(fpg.name, ',') within group(order by fpg.name) good_name 
from fp_place_goods fppg join 
    fp_places fp on fppg.place_id = fp.id join 
    fp_goods fpg on fppg.good_id = fpg.id 
GROUP BY fp.id 

however query below works 

select fp.id, 
    listagg(fpg.id, ',') within group(order by fpg.id) good_ids 
from fp_place_goods fppg join 
    fp_places fp on fppg.place_id = fp.id join 
    fp_goods fpg on fppg.good_id = fpg.id 
GROUP BY fp.id 




select fp.id, fpg.name from fp_places fp join 
     fp_place_goods fppg on fp.id = fppg.place_id join 
     fp_goods fpg on fpg.id = fppg.good_id 

Rückkehr das Ergebnis in Bild

http://i.stack.imgur.com/Y16G3.png

+0

Die Abfrage sieht OK aus. Können Sie das Problem bei einigen Testdaten reproduzieren, die Sie mit dem Forum teilen können? Haben Sie auch versucht, dies mit fp.id, fpg.name von ... auszuführen, um zu sehen, wie der Join überhaupt aussieht? – mathguy

+0

Join funktioniert perfekt, und die Funktion max() funktioniert auf fpg.name, aber ich kann nicht finden, was fehlt, um listagg zu verwenden. – Hikmat

Antwort

5

Es geschah, weil good_name nvarchar ist, und to_char (fpg.name) löste es.