Comment concaténer une chaîne sur plusieurs lignes par groupe ?Bonjour,
J'ai une liste de produits (> 100) avec différents codes produits de chaque produit. Je voudrais créer une nouvelle colonne "Plage de codes de produit" qui concatène le code de produit pour chaque produit, comme indiqué ci-dessous. Comment écrire du code JSL qui peut faire cette tâche ?

ScriptRe : Comment concaténer une chaîne sur plusieurs lignes par groupe ?Jim.
C'est super.Merci.
J'apprends de nouvelles choses aujourd'hui
Re : Comment concaténer une chaîne sur plusieurs lignes par groupe ?Jarmo,
Merci. Toutes les solutions fournies sont excellentes.
Cela m'aidera dans mon apprentissage.
Re : Comment concaténer une chaîne sur plusieurs lignes par groupe ?Et voici encore une autre façon de le faire, en utilisant Get Rows Where ()
New Column( "PRC",
character,
set each value(
theProduct = :Product[Row()];
Concat Items(
:Product Code[Current Data Table() << get rows where( :Product == theProduct )],
"/"
);
)
);

Re : Comment concaténer une chaîne sur plusieurs lignes par groupe ?Une autre option m'est venue à l'esprit qui ne nécessitera aucun script (mais peut être facilement scripté/JMP peut principalement le scripter) (notez que l'ordre changera très probablement avec cette méthode).
1. Fractionner les données d'origine

2. Sélectionnez toutes les colonnes qui commencent par P et utilisez Cols/Combine Columns pour créer une nouvelle colonne

3. Joindre une nouvelle table avec la nouvelle colonne combinée aux données d'origine

4. Résultat :

Re : Comment concaténer une chaîne sur plusieurs lignes par groupe ?Une autre option pourrait être de créer un tableau associatif avec des produits comme clés et des codes de produit dans une liste comme valeurs, puis de remplir une nouvelle colonne avec cela. Cela nécessite JMP16 en raison de For Each, mais il peut être remplacé par For-loop si nécessaire
Names Default To Here(1);
dt = Current Data Table();
aa = Associative Array(:Product << get values);
For Each({{key, value}}, aa,
aa[key] = dt[Loc(dt[0, "Product"], key), "Product Code"];
);
dt << New Column("Product Code Range", Character, Nominal, << Set Each Value(
Concat Items(aa[:Product], "/");
));Re : Comment concaténer une chaîne sur plusieurs lignes par groupe ?J'ai écrit addin qui peut aider avec cela Regrouper les colonnes Listagg . Il utilise sql-query pour effectuer l'opération LISTAGG. Vous pouvez installer le complément et prendre le code à partir de là. L'idée de base est quelque chose comme ceci:
Names Default To Here(1);
dt = Current Data Table();
custom_sql = Eval Insert(
"\[SELECT Product, GROUP_CONCAT(DISTINCT CAST("Product Code" as TEXT)) as "Product Code Range"
FROM t1
GROUP BY Product
]\");
dt_concat = Query(
Table(dt, "t1"),
custom_sql
);

puis rejoignez dt_concat à la table d'origine
Référence de la syntaxe JSL > Fonctions SQL disponibles pour les requêtes JMP > Fonctions SQL d'agrégation