Maison >base de données >tutoriel mysql >Comment transformer une relation un-à-plusieurs en colonnes distinctes dans Informix SQL ?

Comment transformer une relation un-à-plusieurs en colonnes distinctes dans Informix SQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-02 20:02:381003parcourir

How to Transform a One-to-Many Relationship into Separate Columns in Informix SQL?

Comment afficher une relation un-à-plusieurs sous forme de colonnes séparées

Problème :

Pour transformer les données d'un format comme :

id     codes

63592  PELL
58640  SUBL
58640  USBL
73571  PELL
73571  USBL
73571  SUBL

dans :

id     codes 

63592  PELL
58640  SUBL, USBL
73571  PELL, USBL, SUBL

Solution :

L'utilisation d'un agrégat défini par l'utilisateur dans Informix SQL peut y parvenir transformation.

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);

Exemple :

Appliquer cet agrégat aux exemples de données avec la requête suivante :

SELECT id, group_concat(codes)
    FROM anonymous_table
    GROUP BY id;

Produira la transformation souhaitée. sortie :

58640 SUBL,USBL
63592 PELL
73571 PELL,SUBL,USBL
73572 PELL,SUBL,USBL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn