2012-08-27 7 views
5

Ich habe zwei Spalten in Oracle-Datenbank abzurufenWie zwei Spalten Daten in A, B Format in Oracle

+---------+---------+ 
| Column1 | Column2 | 
+---------+---------+ 
| A  | 1  | 
| A  | 2  | 
+---------+---------+ 

Ich möchte die Daten retireive wie i-Daten als Ergebnis

bekommen
+---------+---------+ 
| Column1 | Column2 | 
+---------+---------+ 
| A  | 1,2  | 
+---------+---------+ 

Bitte geben Sie mir die Lösung.

+0

ich Ihre Frage bearbeitet haben Zeilen im Code-Modus zu sehen, können Sie bestätigen, dass das, was Sie gemeint ... Oops, bluefeet erfundenen meine Änderungen. – boisvert

+0

mögliches Duplikat von [Spaltenwerte in einer Zeile] (http://stackoverflow.com/questions/9482560/column-values-in-a-row) –

+0

mögliches Duplikat von [Erstellen einer kommagetrennten Liste von Werten in einem Oracle SQL-Anweisung] (http://stackoverflow.com/questions/5822700/building-a-comma-separated-list-of-values-in-an-oracle-sql-statement) – DCookie

Antwort

16

Tim Hall hat eine schöne kanonische Liste von string aggregation techniques in Oracle.

Welche Technik Sie verwenden hängt von einer Reihe von Faktoren ab, einschließlich der Version von Oracle und ob Sie nach einer reinen SQL-Lösung suchen. Wenn Sie mit Oracle 11.2, würde ich wahrscheinlich LISTAGG

SELECT column1, listagg(column2, ',') WITHIN GROUP(order by column2) 
    FROM table_name 
GROUP BY column1 

mit vorschlagen, wenn Sie eine frühere Version von Oracle verwenden, vorausgesetzt, Sie sind nicht eine rein SQL-Lösung benötigen, würde ich in der Regel die user-defined aggregate function Ansatz lieber mit .

+0

Justin, würde diese Abfrage funktionieren, wenn wir bitte auf mehrere Spalten gruppieren? Danke. – Jimmy

+0

@Jimmy - Ja, sollte es. –

+0

Zusätzliche Details unter http://docs.oracle.com/cd/E11882_01/server.112/e10592/functions089.htm#SQLRF55593 –

1

Wenn Sie 10g erhalten haben, dann müssen Sie die Funktion durch unter:

CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val in number) 
    RETURN VARCHAR2 
IS 
    return_text VARCHAR2(10000) := NULL; 
BEGIN 
    FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP 
    return_text := return_text || ',' || x.col2 ; 
    END LOOP; 
    RETURN LTRIM(return_text, ','); 
END; 
/

So können Sie tun:

select col1, get_comma_separated_value(col1) from table_name 

Fiddle here

Wenn Sie haben, Orakel 11g, können Sie listagg verwenden:

SELECT 
    col1, 
    LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) "names" 
FROM table_x 
GROUP BY col1 

Fiddle here for Listagg

für MySQL, seine gonna einfach sein:

SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1 
Verwandte Themen