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
Das Ziel besteht darin, diese Daten umzuwandeln in:
id codes 63592 PELL 58640 SUBL, USBL 73571 PELL, USBL, SUBL
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);
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;
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;
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!