Maison > base de données > tutoriel mysql > Comment puis-je transformer une relation un-à-plusieurs dans Informix SQL en une seule ligne avec des valeurs séparées par des virgules ?

Comment puis-je transformer une relation un-à-plusieurs dans Informix SQL en une seule ligne avec des valeurs séparées par des virgules ?

Barbara Streisand
Libérer: 2024-12-31 03:11:08
original
991 Les gens l'ont consulté

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

Afficher une relation un-à-plusieurs sous forme de colonnes pour des lignes uniques (ID et liste séparée)

Cette question aborde le problème de la transformation les données d'une table avec une relation un-à-plusieurs dans une table avec chaque ligne contenant un ID unique et une seule colonne comprenant des valeurs séparées par des virgules représentant les nombreuses valeurs. Les données d'entrée sont structurées comme suit :

id     codes
63592  PELL
58640  SUBL
58640  USBL
73571  PELL
73571  USBL
73571  SUBL
Copier après la connexion

L'objectif est de transformer ces données en :

id     codes 
63592  PELL
58640  SUBL, USBL
73571  PELL, USBL, SUBL
Copier après la connexion

Pour réaliser cette transformation à l'aide d'Informix SQL, un agrégat défini par l'utilisateur (UDA ) peuvent être créés :

CREATE AGGREGATE group_concat
    WITH (INIT = gc_init, ITER = gc_iter,
          COMBINE = gc_comb, FINAL = gc_fini);
Copier après la connexion

Où les fonctions gc_init(), gc_iter(), gc_comb() et gc_fini() sont définis comme suit :

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;
Copier après la connexion

Cet UDA peut ensuite être utilisé dans une requête pour effectuer la transformation des données :

SELECT id, group_concat(codes)
    FROM anonymous_table
    GROUP BY id;
Copier après la connexion

La sortie de cette requête sera celle souhaitée données transformées.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal