¿Cómo concatenar cadenas en varias filas por grupo?Hola,
Tengo una lista de productos (> 100) con diferentes códigos de productos de cada producto. Me gustaría crear una nueva columna "Rango de código de producto" que concatene el código de producto para cada producto como se muestra a continuación. ¿Cómo escribir código JSL que pueda hacer esta tarea?

secuencias de comandosRe: ¿Cómo concatenar una cadena en varias filas por grupo?Jim.
Eso es genial.Gracias.
hoy aprendo cosas nuevas
Re: ¿Cómo concatenar una cadena en varias filas por grupo?Jarmo,
Gracias. Todas las soluciones proporcionadas son geniales.
Me ayudará en mi aprendizaje.
Re: ¿Cómo concatenar una cadena en varias filas por grupo?Y aquí hay otra forma de hacer esto, usando 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: ¿Cómo concatenar una cadena en varias filas por grupo?Me vino a la mente una opción más que no requerirá ninguna secuencia de comandos (pero se puede generar fácilmente con secuencias de comandos/JMP en su mayoría puede generar secuencias de comandos) (tenga en cuenta que el orden probablemente cambiará con este método).
1. Dividir los datos originales

2. Seleccione todas las columnas que comienzan con P y use Cols/Combine Columns para crear una nueva columna

3. Une la nueva tabla con la nueva columna combinada a los datos originales

4. Resultado:

Re: ¿Cómo concatenar una cadena en varias filas por grupo?Otra opción podría ser crear una matriz asociativa con productos como claves y códigos de productos en una lista como valores y luego llenar una nueva columna con eso. Esto requiere JMP16 debido a For Each, pero se puede reemplazar con For-loop si es necesario
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: ¿Cómo concatenar una cadena en varias filas por grupo?He escrito complemento que puede ayudar con esto Agrupar columnas de Listagg . Está utilizando sql-query para realizar la operación LISTAGG. Puede instalar el complemento y tomar el código desde allí. La idea básica es algo como esto:
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
);

y luego únete a dt_concat de nuevo a la tabla original
Referencia de sintaxis JSL > Funciones SQL disponibles para consultas JMP > Funciones SQL agregadas