Heim >Datenbank >MySQL-Tutorial >Wie transformiere ich eine Eins-zu-Viele-Beziehung in separate Spalten in Informix SQL?

Wie transformiere ich eine Eins-zu-Viele-Beziehung in separate Spalten in Informix SQL?

Barbara Streisand
Barbara StreisandOriginal
2025-01-02 20:02:381003Durchsuche

How to Transform a One-to-Many Relationship into Separate Columns in Informix SQL?

So zeigen Sie eine Eins-zu-Viele-Beziehung als separate Spalten an

Problem:

Um Daten aus einem zu transformieren Format wie:

id     codes

63592  PELL
58640  SUBL
58640  USBL
73571  PELL
73571  USBL
73571  SUBL

in:

id     codes 

63592  PELL
58640  SUBL, USBL
73571  PELL, USBL, SUBL

Lösung:

Die Verwendung eines benutzerdefinierten Aggregats in Informix SQL kann dies erreichen Transformation.

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;

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

Beispiel:

Anwenden dieses Aggregats auf die Beispieldaten mit der folgenden Abfrage:

SELECT id, group_concat(codes)
    FROM anonymous_table
    GROUP BY id;

Wird das Gewünschte erzeugen Ausgabe:

58640 SUBL,USBL
63592 PELL
73571 PELL,SUBL,USBL
73572 PELL,SUBL,USBL

Das obige ist der detaillierte Inhalt vonWie transformiere ich eine Eins-zu-Viele-Beziehung in separate Spalten in Informix SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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