Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Ayuda: necesito obtener datos de 2 tablas distintas y filtrarlas

Buenos dias, estoy realizando un trabajo para mi empresa. La cosa es que obtengo datos de una base de datos Oracle, cargo datos de 2 tablas AP_SUPPLIERS y AP_SUPPLIERS_SITES_ALL, de estas tabalas necesito trae ciertos campos y a su vez de esos campos solo aquellos que cumplan con sierta condicion: SHIP_TO_LOCATION_ID = '70312'. Lo que tengo armado hasta ahora es esto:

Tabla1:

LOAD

VENDOR_ID,

SEGMENT1,

VENDOR_NAME;

SELECT VENDOR_ID, SEGMENT1, VENDOR_NAME from AP_SUPPLIERS;

Tabla2:

LOAD

VENDOR_ID,

VENDOR_SITE_CODE,

SHIP_TO_LOCATION_ID,

CITY,

ZIP,

PROVINCE,

COUNTRY;

SELECT VENDOR_ID,VENDOR_SITE_CODE,SHIP_TO_LOCATION_ID,CITY,ZIP,PROVINCE,COUNTRY from AP_SUPPLIER_SITES_ALL

where SHIP_TO_LOCATION_ID = '70312'

El problema esta que si bien me trae los datos filtrados... me trae ademas todos los datos de la Tabla1 (AP_SUPPLIERS) y yo solo quiero que traiga de estas 2 tablas los datos donde SHIP_TO_LOCATION_ID sea igual a 70312.

Soy nuevo en esta herramienta y muchas cosas se me escapan, no se si alguno podria darme una mano para orientarme en como resolver este problema.

1 Solution

Accepted Solutions
Not applicable
Author

Juan Manuel, puedes probar el join de esta forma para la tabla1, asumiendo que los campos por los que puedo relacionar ambas tablas es el VENDOR_ID:

Tabla1:

LOAD

VENDOR_ID,

SEGMENT1,

VENDOR_NAME;

SELECT  AP_SUPPLIERS.VENDOR_ID,

               AP_SUPPLIERS.SEGMENT1,

               AP_SUPPLIERS.VENDOR_NAME

from     AP_SUPPLIERS, AP_SUPPLIER_SITES_ALL

where    AP_SUPPLIERS.VENDOR_ID = AP_SUPPLIER_SITES_ALL.VENDOR_ID

          AND AP_SUPPLIER_SITES_ALL.SHIP_TO_LOCATION_ID = '70312';

La tabla2 se cargaría exactamente como lo estabas haciendo.

View solution in original post

5 Replies
Not applicable
Author

Buen día Juan Manuel,

A la tabla1 no le estás condicionando nada, por eso te trae todos los datos. Si en esta tabla no puedes usar la misma condicion que en la tabla2 (where SHIP_TO_LOCATION_ID = '70312') dado que no exista el campo, yo haría un JOIN entre ambas tablas para poder hacer el filtrado primero y luego cargarla.

Espero sirva.

Saludos.

Not applicable
Author

Julian, ahi estuve viendo como hacer el JOIN pero no puedo encontrarle la vuelta. Mire ejemplos y guias de como armarlo pero no me sale con mi estructura de datos. Podrias darme una mano con eso? masomenos como seria el JOIN con estas 2 tablas.

chematos
Specialist II
Specialist II

Hay varias formas de hacer eso, la que me parece más sencilla es que hagas una unión de la tabla 1 con la tabla 2 usando left join(tabla2) para que solamente tome los VENDOR_ID ya filtrados en el where:

Tabla2:

LOAD

VENDOR_ID,

VENDOR_SITE_CODE,

SHIP_TO_LOCATION_ID,

CITY,

ZIP,

PROVINCE,

COUNTRY;

SELECT VENDOR_ID,VENDOR_SITE_CODE,SHIP_TO_LOCATION_ID,CITY,ZIP,PROVINCE,COUNTRY from AP_SUPPLIER_SITES_ALL

where SHIP_TO_LOCATION_ID = '70312'

Left Join(Tabla2)

LOAD

VENDOR_ID,

SEGMENT1,

VENDOR_NAME;

SELECT VENDOR_ID, SEGMENT1, VENDOR_NAME from AP_SUPPLIERS;

Saludos,

Jose

Not applicable
Author

Juan Manuel, puedes probar el join de esta forma para la tabla1, asumiendo que los campos por los que puedo relacionar ambas tablas es el VENDOR_ID:

Tabla1:

LOAD

VENDOR_ID,

SEGMENT1,

VENDOR_NAME;

SELECT  AP_SUPPLIERS.VENDOR_ID,

               AP_SUPPLIERS.SEGMENT1,

               AP_SUPPLIERS.VENDOR_NAME

from     AP_SUPPLIERS, AP_SUPPLIER_SITES_ALL

where    AP_SUPPLIERS.VENDOR_ID = AP_SUPPLIER_SITES_ALL.VENDOR_ID

          AND AP_SUPPLIER_SITES_ALL.SHIP_TO_LOCATION_ID = '70312';

La tabla2 se cargaría exactamente como lo estabas haciendo.

Anonymous
Not applicable
Author

Prueba asi:

Tabla2:

LOAD

VENDOR_ID,

VENDOR_ID as VENDOR_ID_TEMP,

VENDOR_SITE_CODE,

SHIP_TO_LOCATION_ID,

CITY,

ZIP,

PROVINCE,

COUNTRY;

SELECT VENDOR_ID,VENDOR_SITE_CODE,SHIP_TO_LOCATION_ID,CITY,ZIP,PROVINCE,COUNTRY from AP_SUPPLIER_SITES_ALL

where SHIP_TO_LOCATION_ID = '70312'

Tabla1_Temp:

LOAD

VENDOR_ID,

SEGMENT1,

VENDOR_NAME;

SELECT VENDOR_ID, SEGMENT1, VENDOR_NAME from AP_SUPPLIERS;

Tabla1:

NOCONCATENATE

LOAD * RESIDENT Tabla1_Temp

WHERE EXISTS (VENDOR_ID_TEMP, VENDOR_ID);

DROP TABLE Tabla1_Temp;

DROP FIELD VENDOR_ID_TEMP;