
使用Informix SQL 作為具有逗號分隔清單的唯一行的一對多關係
與Stack Overflow 上提出的問題類似,這本文提供了一個Informix SQL解決方案,用於將一對多關係顯示為以逗號分隔的單一唯一行
初始資料
1 2 3 4 5 6 7 | id codes
63592 PELL
58640 SUBL
58640 USBL
73571 PELL
73571 USBL
73571 SUBL
|
登入後複製
所需輸出
1 2 3 4 | id codes
63592 PELL
58640 SUBL, USBL
73571 PELL, USBL, SUBL
|
登入後複製
自訂使用者定義的聚合
為了實現如果需要輸出,則需要自訂使用者定義聚合(UDA)。下面是一個名為 group_concat 的 UDA 範例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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:
1 2 3 | SELECT id, group_concat(codes)
FROM anonymous_table
GROUP BY id;
|
登入後複製
輸出
1 2 3 | 58640 SUBL,USBL
63592 PELL
73571 PELL,SUBL,USBL
|
登入後複製
附加註釋
- 此UDA 處理以下資料型態:可以轉換為VARCHAR(255)(例如,數字或時間
- 從Informix 12.10.FC5 開始,聚合結果的最大長度為16380 位元組。
- 要刪除UDA 和關聯函數,請執行以下命令:
1 2 3 4 5 | 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中文網其他相關文章!