2017-07-08 5 views
1

Ich habe folgendes als Teil einer größeren Select-Abfrage, die soweit funktioniert und mir hilft, nur eine Zeile für jeden Datensatz in Spalte1 zu bekommen.Oracle SQL: Xmlagg mit mehreren Xmlelement/Spalten in Select

Dies gibt jedoch ein separates XML-Element für Spalte2, Spalte3 und Spalte4 zurück, während ich sie alle in einer Spalte brauche.

Kann mir jemand sagen, wie ich die XML-Elemente für diese drei Spalten in einem kombinieren kann?
Als ich das erforschte, bin ich auf XMLFOREST gestoßen, aber das scheint keine weit verbreitete Funktion zu sein, und ich bin mir nicht sicher, wie ich es hier anwenden soll.

Meine Anfrage (relevanter Teil):

SELECT 
    a.column1 AS Column1 
    , RTRIM(XMLAGG(XMLELEMENT(e, b.column2) ORDER BY b.column2).EXTRACT('//text()'), ',') AS Column2 
    , RTRIM(XMLAGG(XMLELEMENT(e, b.column3) ORDER BY b.column3).EXTRACT('//text()'), ',') AS Column3 
    , RTRIM(XMLAGG(XMLELEMENT(e, b.column4) ORDER BY b.column4).EXTRACT('//text()'), ',') AS Column4 
    , c.column5 AS Column5 
    /* ... */ 
FROM 
    /* ... */ 

Stromausgang:
Current output

Erforderliche Ausgabe:
Required output

Vielen Dank im Voraus für jede Hilfe,
Mike

+1

Sie werden schneller bessere Antworten bekommen, wenn Sie die Ausgabe enthalten, die Sie erhalten und die Ausgabe, die Sie wollen. – jeff6times7

+0

@ jeff6times7: Danke. Ich habe dies jetzt zum Beitrag hinzugefügt. Grundsätzlich versuche ich die Daten aus den Spalten 2, 3 und 4 für jeden eindeutigen Datensatz in Spalte 1 zu kombinieren. Der Unterschied zur aktuellen Ausgabe besteht darin, dass ich dies in einer Spalte kombinieren möchte, anstatt drei separate Spalten dafür zu haben. – keewee279

+0

Es könnte nett sein, wenn Sie Beispieleingabe-XML für die gewünschte Ausgabe beigefügt hatten. – krokodilko

Antwort

-1
SELECT 
    a.column1 AS Column1 
    , RTRIM(XMLAGG(XMLELEMENT(e, b.column2||','||b.column3||','||b.column4) ORDER BY b.column2).EXTRACT('//text()'), ',') AS Column2 
    , c.column5 AS Column5 
    /* ... */ 
FROM 
    /* ... */ 
+0

Pls erklären in Ihren eigenen Worten, wie dies das Problem lösen wird, um der Antwort einen Mehrwert zu geben, anstatt nur den Code zu beantworten. –

Verwandte Themen