2016-08-03 3 views
0

Ich habe die folgende TabelleSQL verketten doppelte Werte auf der Basis eines Referenzschlüssel

col A | Col B 
-------------- 
    a | 1 
-------------- 
    a | 2 
-------------- 
    b | 1 
-------------- 
    b | 3 
-------------- 
    c | 1 

und ich bin im Grunde für eine SQL-Abfrage, die die folgende Ausgabe

col A | Col B 
-------------- 
    a | "1:2" 
-------------- 
    b | "1:3" 
-------------- 
    c | "1" 

Es produzieren sein muss, ein sehr einfache Abfrage, aber ich kann es gerade nicht herausfinden.

+0

Welche Version von Oracle? LISTAGG ist die natürliche Lösung, ist aber erst seit Version 11.2 verfügbar. Für die richtige Syntax: http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm#SQLRF30030 – mathguy

Antwort

3

Sie können ListAgg() Funktion Aggregat Zeichenfolge Ergebnisse verwenden:

SELECT colA, '"' || ListAgg(colB, ':') WITHIN GROUP (ORDER BY colb) || '"' 
FROM yourtable 
GROUP BY colA; 

ListAgg() nimmt die Spalte wir als ersten Parameter und dem Trennzeichen (s) als zweiten Parameter werden aggregiert. Wir verknüpfen einfach die doppelten Anführungszeichen mit dem ListAgg-Ergebnis, um das endgültige Ergebnis zu erhalten, das Sie suchen.

+0

In Oracle wird diese Lösung nicht kompiliert (falsche Syntax). LISTAGG fehlen die obligatorischen Schlüsselwörter WITHIN GROUP und die order_by-Klausel. – mathguy

+0

Entschuldigung. Ich habe den Rest des benötigten Hokuspokus nicht hinzugefügt. Ich hatte meinen Kopf fest auf MySqls Group_Concat() -Funktion, die keine 'WITHIN GROUP'-Klausel benötigt. – JNevill

+0

Vielen Dank. es funktioniert mit meiner Version von Oracle (11g Release 11.2.0.3.0 - 64bit) Könnten Sie bitte zusätzliche Informationen dazu in anderen DBMS (MySQL, MS SQL) machen? Es könnte für andere hilfreich sein. – Piccolo

Verwandte Themen