2016-03-23 10 views
0

Ich führe eine Abfrage, wo ich die GL-Spalte in der GROUP BY-Klausel nicht enthalten soll, weil ich nicht für jede Variation eine andere Zeile anzeigen möchte des GL-Feldes. Aber ich muss das Feld in der nachfolgenden Verarbeitung auswerten und es mit einer Liste dynamisch generierter GL-Nummern vergleichen. Der beste Weg, dies zu tun, ist mit einer Funktion und ich versuche ListAgg(). Erstens, gibt es eine bessere Funktion, um den GL von jeder Zeile mit einer Liste zu vergleichen? Außerdem kann ich die Ergebnisse unten mit SQL Developer abrufen, aber nicht, wenn ich versuche, es auf einer Webseite auszugeben, auf der Oracle einen ORA-01002-Fehler zurückgibt. Wir verwenden in beiden Fällen 12c. Unten ist die Abfrage und die Ausgabe. Ohne ListAgg() muss ich die GL-Spalte in SELECT und GROUP BY einfügen, und es wird in unerwünschter Weise eine separate Zeile für jeden GL ausgegeben.ListAgg() ORA-01002: Fetch außerhalb der Sequenz

SELECT h.h_spa_id as spa_id, 
     h.submit_dt, 
     h.oa_ap_date, 
     ListAgg(gl,',') within group (order by gl) "mygl" 
WHERE h.next_apprv= 'approverID' 
    and h.table1_id = d.table2_id 
    and h.table1_id = table3_id 
group by h.h_spa_id,h.submit_dt,h.oa_ap_date 
order by h.h_spa_id 

H_SPA_ID SUBMIT_DT    OA_AP_DATE      MYGL 
1627005 1/25/2008 10:11:53 AM 1/25/2008 11:15:56 AM  52287,52287,52287,52287,52287,52287,52287,52287,52287,52287,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385 
+1

Wo ist Ihre FROM-Klausel? –

Antwort

0

Sie können es in einer Sammlung CAST und COLLECT zur Gruppe verwenden:

SELECT h.h_spa_id as spa_id, 
     h.submit_dt, 
     h.oa_ap_date, 
     CAST(COLLECT(DISTINCT gl) AS SYS.ODCINUMBERLIST) AS mygl 
FROM  h 
     INNER JOIN 
     d 
     ON (h.table1_id = d.table2_id) 
WHERE h.next_apprv = 'approverID' 
AND  h.table1_id = table3_id 
GROUP BY h.h_spa_id, 
     h.submit_dt, 
     h.oa_ap_date 
ORDER BY h.h_spa_id 

Dann, wenn Sie es für die nachfolgende Verarbeitung der Werte verwenden in einem Array sein.