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

Comment transformer des relations un-à-plusieurs en colonnes distinctes dans Informix SQL ?

DDD
Libérer: 2025-01-03 04:15:39
original
866 Les gens l'ont consulté

How to Transform One-to-Many Relationships into Distinct Columns in Informix SQL?

Comment afficher une relation un-à-plusieurs sous forme de colonnes distinctes

Problème :
Vous rencontrez une situation dans laquelle les données présentent un relation un-à-plusieurs et vous souhaitez la représenter de manière plus structurée et plus lisible. Plus précisément, vous souhaitez transformer une table avec des colonnes contenant des ID uniques et des listes de valeurs séparées par des virgules en une table où chaque valeur distincte est affichée dans une colonne distincte.

Solution SQL Informix :
L'approche recommandée dans Informix SQL consiste à utiliser une fonction d'agrégation définie par l'utilisateur. Bien qu'Informix n'offre pas nativement de fonction group_concat(), vous pouvez créer un agrégat personnalisé qui imite sa fonctionnalité.

Création de l'agrégat défini par l'utilisateur :
Le code suivant montre comment pour créer les éléments définis par l'utilisateur nécessaires agrégat :

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

Utilisation :
Une fois que vous avez créé l'agrégat, vous pouvez l'exploiter dans une requête pour réaliser la transformation souhaitée :

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

Exemple :
Considérons un exemple de table nommée anonyme_table :

CREATE TEMP TABLE anonymous_table
(
    id      INTEGER NOT NULL,
    codes   CHAR(4) NOT NULL,
    PRIMARY KEY (id, codes)
);

INSERT INTO anonymous_table VALUES(63592, 'PELL');
INSERT INTO anonymous_table VALUES(58640, 'SUBL');
INSERT INTO anonymous_table VALUES(58640, 'USBL');
INSERT INTO anonymous_table VALUES(73571, 'PELL');
INSERT INTO anonymous_table VALUES(73571, 'USBL');
INSERT INTO anonymous_table VALUES(73571, 'SUBL');
Copier après la connexion

L'application de la requête susmentionnée à cette table produirait le résultat suivant :

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

Cela démontre comment la fonction d'agrégation regroupe et concatène efficacement les codes associés à chaque identifiant unique. , présentant les données de manière plus organisée.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal