将一对多关系显示为唯一行(ID 和分隔列表)的列
此问题解决了转换问题将具有一对多关系的表中的数据存入一个表中,该表的每一行都包含一个唯一的 ID,单列包含表示数据的逗号分隔值许多价值观。输入数据的结构如下:
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 中的一对多关系转换为具有逗号分隔值的单行?的详细内容。更多信息请关注PHP中文网其他相关文章!