首頁 > 資料庫 > mysql教程 > 如何將 Informix SQL 中的一對多關係轉換為具有逗號分隔值的單行?

如何將 Informix SQL 中的一對多關係轉換為具有逗號分隔值的單行?

Barbara Streisand
發布: 2024-12-31 03:11:08
原創
978 人瀏覽過

How Can I Transform a One-to-Many Relationship in Informix SQL into a Single Row with Comma-Separated Values?

將一對多關係顯示為唯一行(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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板