Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Pasar datos desde una variable a una consulta sql

Hola.

Soy nuevo en qlikview y tengo el siguiente problema, desde la primera tabla quiero obtener todos los datos del campo aufnr (de la tabla aufk) que cumplan con la condición de que phas2 sea distinto de X. Para luego usar esos datos  y obtener los equipos asociado a esas ordenes en la tabla afih.

Este listado se lo cargo a la variable vNOrden, pero al colocarlo como condición de carga en la tabla afih no me arroja ningún resultado positivo, es mas la variable aparece vacía. Lo mejor que he logrado es pasar 1 solo valor.

He comprobado los datos originales y debieran obtener por lo menos 10 registros de ordenes que cumplan la condición de phas2 distinto de 'X'.

aufk:

LOAD

     aufnr as orden,

     phas2;

SQL select aufnr phas2 from aufk where phas2 <> 'X';

Store * from aufk into $(vDirectotyPath)aufk.qvd;

Let vNOrden = peek('orden');

Drop table aufk;

afih:

LOAD

     aufnr as orden,

     equnr as equipo;

Select aufnr equnr from afih where aufnr = '$(vNOrden)';

Store * from afih into $(vDirectoryPath)afih.qvd;

Drop table afih

También probé con agregar la función concat en la tabla aufk, y cambiar el selec de la tabla afih:

Concat(chr(39) & 'aufnr' & chr(39), ', ') as orden,                        //usado en tabla aufk

Select aufnr equnr from afih where aufnr IN ('$(vNOrden)');          //usado en tabla afih

Pero me arroja un error haciendo referencia a que la instrucción SQL esta mal formulada.

Atento a cualquier ayuda que me puedan dar

Saludos a todos.-

1 Solution

Accepted Solutions
alex_millan
Creator III
Creator III

Releyendo tu pregunta, quizás no te entendí antes:

¿lo que quieres es limitar la carga en la segunda tabla a las ordenes cargadas en la primera consulta?

Si fuera así, quizás podrías plantearte hacer un join de las dos tablas, por ejemplo:

aufk:

LOAD

     aufnr as orden,

     phas2;

SQL Select aufnr phas2 from aufk where phas2 <> 'X';

inner join(aufk)

afih:

LOAD

     aufnr as orden,

     equnr as equipo;

SELECT aufnr equnr from afih;

View solution in original post

7 Replies
alex_millan
Creator III
Creator III

Hola Mauricio,

¿has probado a poner la condición sin colocar la variable sin enmarcar en comillas?

...

where aufnr = $(vNOrden)

Debería funcionar.

Espero que te sirva de ayuda,

Un saludo,

Not applicable
Author

Hola, gracias por responder.

Probé esta posible solución pero me arroja el siguiente resultado.

/QTQVC/OPEN_STREAM failed after 00:00:01 Key = SQL_ERROR (ID:00 Type:E Number:001 Unexpected end of condition after "=" . .)

SQL Select * from AFIH where AUFNR =

Saludos.-

Not applicable
Author

Mauricio Vargas;

Una recomendacion:

1.-Primeramente todo lo que tengas en las tablas que vayas a utilizar de SQL pasalo a tablas residentes o .qvd's de qlikview.

2..- un problema muy comun que yo tenia al tratar de asociar o ligar tablas era porque en los campos llave tenia espacios en blanco lo cual tuve que utilizar ltrim, rtrim.

checalo

saludos!!! en lo que te pueda ayudar!!1

Not applicable
Author

Hola, gracias por la aclaración.

En este caso el resultado de las tablas se van a una tabla QVD, para un tratamiento posterior. Pero me parece valido tratar directamente este mismo problema en los QVD y no en la carga desde SAP.

Con respecto a los espacios vacíos, ya me había percatado de esto y corregí los errores que tenia..

Gracias.-

alex_millan
Creator III
Creator III

¿Has depurado el script y confirmado que la variable toma el valor correctamente?

alex_millan
Creator III
Creator III

Releyendo tu pregunta, quizás no te entendí antes:

¿lo que quieres es limitar la carga en la segunda tabla a las ordenes cargadas en la primera consulta?

Si fuera así, quizás podrías plantearte hacer un join de las dos tablas, por ejemplo:

aufk:

LOAD

     aufnr as orden,

     phas2;

SQL Select aufnr phas2 from aufk where phas2 <> 'X';

inner join(aufk)

afih:

LOAD

     aufnr as orden,

     equnr as equipo;

SELECT aufnr equnr from afih;

Not applicable
Author

Estimado;

Efectivamente, eso eso es lo que quiero. He probado tu solución y he logrado lo que quería hacer.

Muchas gracias