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);
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;
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');
L'application de la requête susmentionnée à cette table produirait le résultat suivant :
58640 SUBL,USBL 63592 PELL 73571 PELL,SUBL,USBL
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!