Hallo,
ich bin Oracle-Anfänger und hoffe, hier kann mir jemand weiterhelfen.
Ich habe eine Abfrage bei der ich für Spalte 1 (p.S_ID) teilweise mehrere Einträge, d.h. Zeilen erhalte.
Diese Einträge möchte ich nun so zusammenfassen, dass in Spalte 1 jeder Eintrag nur einmal vorkommt und in Spalte 2 die Einträge entsprechend aggregiert (verknüpft) werden.
Die Funktion Listagg kann ich nicht verwenden, da ich hier teilweise das Zeichenlimit von Oracle überschreite.
Die Funktion Xmlagg ist genau das Richtige für meinen Fall, nur wende ich sie offenbar falsch an und erhalte folgenden Fehler:
Kann mir jemand sagen, wie ich mein Select hier bzw. den Xmlagg-Teil richtig schreiben muss ?
Mein Query (gekürzt):
Vielen Dank im Voraus.
VG,
Martin
ich bin Oracle-Anfänger und hoffe, hier kann mir jemand weiterhelfen.
Ich habe eine Abfrage bei der ich für Spalte 1 (p.S_ID) teilweise mehrere Einträge, d.h. Zeilen erhalte.
Diese Einträge möchte ich nun so zusammenfassen, dass in Spalte 1 jeder Eintrag nur einmal vorkommt und in Spalte 2 die Einträge entsprechend aggregiert (verknüpft) werden.
Die Funktion Listagg kann ich nicht verwenden, da ich hier teilweise das Zeichenlimit von Oracle überschreite.
Die Funktion Xmlagg ist genau das Richtige für meinen Fall, nur wende ich sie offenbar falsch an und erhalte folgenden Fehler:
SQL:
"ORA-00937: not a single-group group function"
Kann mir jemand sagen, wie ich mein Select hier bzw. den Xmlagg-Teil richtig schreiben muss ?
Mein Query (gekürzt):
SQL:
ALTER SESSION ENABLE PARALLEL QUERY;
SELECT
p.S_ID AS ID
, XMLELEMENT
(
"AINs", XMLAGG
(
XMLELEMENT
(
"AIN", i.AIN ||
'-nl-Article: ' || SUBSTR(a.AIN_NAME, 1, 50) || '...' ||
'-nl-Quantity: ' || SUM(i.UNITS) ||
'-nl-Price: ' || TO_CHAR(i.PRICE, 'FM9,990.00') || ' + ' || TO_CHAR(i.PRICE_TAX, 'FM9,990.00') || ' USt = ' || TO_CHAR((i.PRICE + i.PRICE_TAX), 'FM9,990.00') ||
'-nl------' ||
'-nl-Subtotal: ' || TO_CHAR((i.PRICE * SUM(i.UNITS)), 'FM9,990.00') || ' + ' || TO_CHAR((i.PRICE_TAX * SUM(i.UNITS)), 'FM9,990.00') || ' USt = ' || TO_CHAR(((i.PRICE + i.PRICE_TAX) * SUM(i.UNITS)), 'FM9,990.00')
)
)
)/*.EXTRACT('//text()')*/ AS Details
FROM
ITEMS i
LEFT JOIN
AINS a
ON i.AIN = a.AIN
LEFT JOIN
PKGS p
ON i.SHIPMENT = p.SHIPMENT
WHERE
/*...*/
GROUP BY
p.S_ID
, i.AIN
, a.AIN_NAME
, i.UNITS
, i.PRICE
, i.PRICE_TAX
ORDER BY
p.S_ID
Vielen Dank im Voraus.
VG,
Martin