Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine Eins-zu-Viele-Beziehung in Informix SQL in eine einzelne Zeile mit durch Kommas getrennten Werten umwandeln?

Wie kann ich eine Eins-zu-Viele-Beziehung in Informix SQL in eine einzelne Zeile mit durch Kommas getrennten Werten umwandeln?

Barbara Streisand
Freigeben: 2024-12-31 03:11:08
Original
978 Leute haben es durchsucht

How Can I Transform a One-to-Many Relationship in Informix SQL into a Single Row with Comma-Separated Values?

Zeigen Sie eine Eins-zu-Viele-Beziehung als Spalten für eindeutige Zeilen (ID und getrennte Liste)

Diese Frage befasst sich mit dem Problem der Transformation Daten aus einer Tabelle mit einer Eins-zu-viele-Beziehung in eine Tabelle, wobei jede Zeile eine eindeutige ID und eine einzelne Spalte mit durch Kommas getrennten Werten enthält, die die vielen Werte darstellen. Die Eingabedaten sind wie folgt strukturiert:

id     codes
63592  PELL
58640  SUBL
58640  USBL
73571  PELL
73571  USBL
73571  SUBL
Nach dem Login kopieren

Das Ziel besteht darin, diese Daten umzuwandeln in:

id     codes 
63592  PELL
58640  SUBL, USBL
73571  PELL, USBL, SUBL
Nach dem Login kopieren

Um diese Transformation mit Informix SQL zu erreichen, einem benutzerdefinierten Aggregat (UDA ) können erstellt werden:

CREATE AGGREGATE group_concat
    WITH (INIT = gc_init, ITER = gc_iter,
          COMBINE = gc_comb, FINAL = gc_fini);
Nach dem Login kopieren

Wobei die Funktionen gc_init(), gc_iter(), gc_comb() und gc_fini() sind wie folgt definiert:

CREATE FUNCTION gc_init(dummy VARCHAR(255)) RETURNING LVARCHAR;
    RETURN '';
END FUNCTION;

CREATE FUNCTION gc_iter(result LVARCHAR, value VARCHAR(255))
    RETURNING LVARCHAR;
    IF result = '' THEN
        RETURN TRIM(value);
    ELSE
        RETURN result || ',' || TRIM(value);
    END IF;
END FUNCTION;

CREATE FUNCTION gc_comb(partial1 LVARCHAR, partial2 LVARCHAR)
    RETURNING LVARCHAR;
    IF partial1 IS NULL OR partial1 = '' THEN
        RETURN partial2;
    ELIF partial2 IS NULL OR partial2 = '' THEN
        RETURN partial1;
    ELSE
        RETURN partial1 || ',' || partial2;
    END IF;
END FUNCTION;

CREATE FUNCTION gc_fini(final LVARCHAR) RETURNING LVARCHAR;
    RETURN final;
END FUNCTION;
Nach dem Login kopieren

Dieser UDA kann dann in einer Abfrage verwendet werden, um die Datentransformation durchzuführen:

SELECT id, group_concat(codes)
    FROM anonymous_table
    GROUP BY id;
Nach dem Login kopieren

Die Ausgabe dieser Abfrage ist die gewünschte transformierte Daten.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Eins-zu-Viele-Beziehung in Informix SQL in eine einzelne Zeile mit durch Kommas getrennten Werten umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage