一意の行の列として 1 対多の関係を表示する (ID と区切りリスト)
この質問は、変換の問題を扱います。 1 対多の関係を持つテーブルのデータを、各行に一意の ID と、カンマ区切りの値で構成される 1 つの列が含まれるテーブルに変換します。たくさんの価値観。入力データは次のような構造になっています:
id codes 63592 PELL 58640 SUBL 58640 USBL 73571 PELL 73571 USBL 73571 SUBL
目的は、このデータを次のように変換することです:
id codes 63592 PELL 58640 SUBL, USBL 73571 PELL, USBL, SUBL
Informix SQL を使用してこの変換を実現するには、ユーザー定義の集計 (UDA) ) を作成できます:
CREATE AGGREGATE group_concat WITH (INIT = gc_init, ITER = gc_iter, COMBINE = gc_comb, FINAL = gc_fini);
関数 gc_init()、gc_iter()、 gc_comb() および gc_fini() は次のように定義されます:
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;
この UDA をクエリで使用してデータ変換を実行できます:
SELECT id, group_concat(codes) FROM anonymous_table GROUP BY id;
この出力クエリは、目的の変換されたデータになります。
以上がInformix SQL の 1 対多の関係をカンマ区切りの値を含む単一の行に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。