2017-12-29 39 views
0

Ich versuche, eine LISTAGG-Funktion zu der unten stehenden Abfrage hinzuzufügen, so dass die Ausgabe ein einzelner Wert sein kann, getrennt durch Kommas. Jemand rät, wie Sie die LISTAGG-Funktion hinzufügen.Oracle Sql LISTAGG mit CASE

SELECT CASE A.ATTRIBUTE_NAME 
WHEN 'EA' THEN 'EMAIL ADDRESS' 
WHEN 'CP' THEN 'Company' 
WHEN 'OG' THEN 'Organization' 
END AS USER_DETAILS 
FROM USERS A LEFT OUTER JOIN DETAILS B 
ON A.ID = B.USER_ID 
WHERE USER_NAME LIKE '%John%' 
+0

Meinen Sie nur, dass Sie den Fallausdruck das erste Argument für Listagg machen wollen? Ich bin mir nicht sicher, warum das ein Problem ist, oder wenn Sie etwas anderes meinen. Was hast du probiert und was ist passiert? Es sieht nicht so aus, als wäre es eine sehr nützliche Ausgabe, also könnten Beispieldaten und das erwartete Ergebnis helfen, zu erklären, was Sie wirklich versuchen. –

+0

USER_DETAILS E-MAIL-ADRESSE Firma Organisation Das obige Ergebnis, das ich bekomme, sollte umgewandelt werden als - E-Mail-Adresse, Unternehmen, Organisation. Ich habe versucht, meine obige Abfrage als den ersten Ausdruck von LISTAGG zu geben, aber nicht funktioniert. Können Sie uns die genaue Anfrage stellen – Jesvin

+0

Sie sollten uns Ihren Versuch zeigen und was "nicht funktioniert" bedeutet. Falsches Ergebnis? Ein Fehler? Und bitte [bearbeiten Sie Ihre Frage] (https://stackoverflow.com/posts/48022584/edit), um Informationen hinzuzufügen. –

Antwort

0

Aus Ihrer Beschreibung möchten Sie einfach den Fall Ausdruck innerhalb des listagg() Aufruf setzen:

SELECT LISTAGG(
    CASE A.ATTRIBUTE_NAME 
    WHEN 'EA' THEN 'EMAIL ADDRESS' 
    WHEN 'CP' THEN 'Company' 
    WHEN 'OG' THEN 'Organization' 
    END, 
    ',') WITHIN GROUP (ORDER BY A.ATTRIBUTE_NAME) AS USER_DETAILS 
FROM USERS A LEFT OUTER JOIN DETAILS B 
ON A.ID = B.USER_ID 
WHERE USER_NAME LIKE '%John%' 

Obwohl es so aussieht, es B.ATTRIBUTE_NAME Bezug werden sollte; vielleicht hast du es falsch verstanden, den Code für das Posten zu ändern. Und möglicherweise möchten Sie die Elemente in der Liste anders bestellen.