Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenos días,
Tengo un problema que me resulta complejo de saber como resolver. Intentaré explicarlo de la mejor manera posible. Yo tengo la siguiente estructura:
IDPrincipal, Campo1
1 15-45-234-1
El problema es que el Campo1 tiene la siguiente estructura por ejmplo 15-45-234-1, pero el número de valores no es siempre el mismo, puede venir 3-45, 34, etc. Yo necesito procesar el campo1, de tal forma que me quede algo de la siguiente forma
IDPrincipal,nuevoCampo
1 15
1 45
1 234
1 1
Resumiendo, lo que quiero hacer es procesar el campo1, y que quede asociado tantos elementos como tenga al IDPrincipal . No tengo idea de como hacer algo así. Se que dificulta que no siempre sea el mismo número de elementos en Campo1. Programando con un lenguaje si seria facil de hacer, pero partiendo de bd y qlikview no es tan fácil.
¿Alguien se le ocurre alguna idea y me orienta un poco?
Un saludo
Hola Jonay,
Si te entiendo bien lo único que necesitas para conseguir esto es cagar crear "nuevoCampo" como:
SubField(Campo1,'-') as nuevoCampo
Te adjunto un ejemplo de como puedes hacer esto.
Espero que sea esto lo que necesitas.
Un saludo
Alfredo
Hola Jonay,
Si te entiendo bien lo único que necesitas para conseguir esto es cagar crear "nuevoCampo" como:
SubField(Campo1,'-') as nuevoCampo
Te adjunto un ejemplo de como puedes hacer esto.
Espero que sea esto lo que necesitas.
Un saludo
Alfredo
Hola Jonay:
Creo que con la funcion subfield(Campo1, '-' ) obtienes lo que pides
Si necesitas saber el número de elementos que hay: con la funcion substringcount(Campo1 , '-') obtienes el número de separadores del campo ahora sumas 1
Nunca lo he usado, solo he leído la ayuda
Saludos
Joaquín
Hola Jonay,
Pordrias probar esto:
Aux:
LOAD * INLINE [
IDPrincipal, Campo1
1, 15-45-234-1
1, 5-35-74-1
1, 2-65-634-1
];
Tabla:
Load
IDPrincipal,
subfield(Campo1,'-') AS Campo1
Resident Aux;
En caso que no siempre sea un '-' el separador y siempre y cuando se pueda podes usar un Replace. Por ejemplo si ademas del separado '-' tiene un separado '/ ' podes hacer
subfield(Replace(Campo1,'/','-'),'-') as campo
Saludos,
Agustin
Muchas gracias a todos, la solución propuesta por Alfredo funciona perfectamente, y con la función que nombró Joaquin puedo saber cuantos elementos tiene la expresion.
Ahora me surge otro problema, que es la operación inversa, concatenar para crear una cadena, una vez la haya procesado. Me explico, parto de aquí:
IDPrincipal, Campo1
1 15-45-234-1
Consigo lo siguiente:
IDPrincipal,nuevoCampo
1 15
1 45
1 234
1 1
Una vez obtengo eso, yo relaciono ese nuevo campo de tal forma que saco otra informacion
IDPrincipal,nuevoCampo, otrocampo
1 15 valor1
1 45 valor2
1 234 valor3
1 1 valor4
Ahora yo quiero concatenar el valor de ese otro campo para cada IDPrincipal, para esje ejemplo quedaria:
valor1-valor2,valor3-valor4
He intentado hacer
load IDPrincipal, concat(otrocampo,' ')
resident tabla
group by IDPrincipal;
Pero no me funciona, ¿alguien tiene alguna idea de como hacerlo?
Un saludo
Hola Jonay:
Prueba la función previous(expresión)
LOAD ID,
previous(campo) & campo as otrocampo
Recuerda marcar las respuestas útiles/correctas, y cerrar los hilos
Saludos
Joaquín
Jonay,
Así como hiciste debería andar. Proba ponerle un nombre al concat.
load IDPrincipal,
concat(otrocampo,' ') AS CampoConcatenado
resident tabla
group by IDPrincipal;
Saludos,
Agustin.
Buenas Joaquin,
Pero hecho de esta forma no me permite usar el group by para agrupar por ese IDPrincipal y claro lo que hace es agruparme parejas, nunca me conforma la secuancia completa.
Un saludo
Haz lo que propone Agustín ... cada solución resuelve una problemática diferente
Buenos días,
Si funcionaba la forma del concat y el group by. El problema es que yo habia hecho la prueba con valores numericos y se ve que ahí lo del concat no funciona bien.
Gracias por la ayuda
Saludos