使用Informix SQL 作為具有逗號分隔清單的唯一行的一對多關係
與Stack Overflow 上提出的問題類似,這本文提供了一個Informix SQL解決方案,用於將一對多關係顯示為以逗號分隔的單一唯一行
初始資料
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
自訂使用者定義的聚合
為了實現如果需要輸出,則需要自訂使用者定義聚合(UDA)。下面是一個名為 group_concat 的 UDA 範例:
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);
分組串聯查詢
將 group_concat UDA group應用於原始數據,我們可以按唯一 id進行分組,使用自定義聚合代碼UDA:
SELECT id, group_concat(codes) FROM anonymous_table GROUP BY id;
輸出
58640 SUBL,USBL 63592 PELL 73571 PELL,SUBL,USBL
附加註釋
DROP AGGREGATE IF EXISTS group_concat; DROP FUNCTION IF EXISTS gc_fini; DROP FUNCTION IF EXISTS gc_init; DROP FUNCTION IF EXISTS gc_iter; DROP FUNCTION IF EXISTS gc_comb;
以上是如何在 Informix SQL 中將一對多關係顯示為逗號分隔清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!