Problem:
Sie stoßen auf eine Situation, in der Daten Folgendes aufweisen: Eine Eins-zu-viele-Beziehung, und Sie möchten sie strukturierter und lesbarer darstellen. Konkret möchten Sie eine Tabelle mit Spalten, die eindeutige IDs und durch Kommas getrennte Wertelisten enthalten, in eine Tabelle umwandeln, in der jeder eindeutige Wert in einer separaten Spalte angezeigt wird.
Informix SQL-Lösung:
Der empfohlene Ansatz in Informix SQL ist die Verwendung einer benutzerdefinierten Aggregatfunktion. Während Informix nativ keine Funktion „group_concat()“ anbietet, können Sie ein benutzerdefiniertes Aggregat erstellen, das seine Funktionalität nachahmt.
Erstellen des benutzerdefinierten Aggregats:
Der folgende Code zeigt, wie um die notwendigen Benutzerdefiniert zu erstellen Aggregat:
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);
Verwendung:
Sobald Sie das Aggregat erstellt haben, können Sie es in einer Abfrage nutzen, um die gewünschte Transformation zu erreichen:
SELECT id, group_concat(codes) FROM anonymous_table GROUP BY id;
Beispiel:
Betrachten wir eine Beispieltabelle mit dem Namen anonyme_Tabelle:
CREATE TEMP TABLE anonymous_table ( id INTEGER NOT NULL, codes CHAR(4) NOT NULL, PRIMARY KEY (id, codes) ); INSERT INTO anonymous_table VALUES(63592, 'PELL'); INSERT INTO anonymous_table VALUES(58640, 'SUBL'); INSERT INTO anonymous_table VALUES(58640, 'USBL'); INSERT INTO anonymous_table VALUES(73571, 'PELL'); INSERT INTO anonymous_table VALUES(73571, 'USBL'); INSERT INTO anonymous_table VALUES(73571, 'SUBL');
Das Anwenden der oben genannten Abfrage auf diese Tabelle würde die folgende Ausgabe ergeben:
58640 SUBL,USBL 63592 PELL 73571 PELL,SUBL,USBL
Dies zeigt, wie die Aggregatfunktion die mit jeder eindeutigen ID verknüpften Codes effektiv gruppiert und verkettet , wodurch die Daten besser organisiert dargestellt werden.
Das obige ist der detaillierte Inhalt vonWie transformiere ich Eins-zu-Viele-Beziehungen in eindeutige Spalten in Informix SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!