Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
jorge_redondo
Contributor III
Contributor III

Cómo relacionar estas tablas?

Hola!

Tengo un problema a la hora de cargar varias tablas de procedentes de una aplicación contable.

El caso es que no doy con la sentencia SQL SELECT para conseguir el resultado que intento describir a la derecha de la imagen. A pesar de que cuento en ambas tablas (IVA y DIARIO) con un campo común (ID_IVA), el problema es que, los campos que necesito unir al resultado final figuran en otra fila distinta a la de la clave ID_IVA. No sé si he conseguido explicarme bien, espero que con el esquema se pueda entender.

Alguna pista? Gracias de antemano!!

Libro18 - Excel_2019-02-01_16-54-59.jpg

11 Replies
jorge_redondo
Contributor III
Contributor III
Author

Aunque todo funciona correctamente, ahora me encuentro con un problema.

El script conecta con varias BBDD de Access, cada una correspondiente a una empresa.

ODBC CONNECT32 TO [MS Access Database;DBQ=C:\Contasol\Datos\4002019.MDB];
ODBC CONNECT32 TO [MS Access Database;DBQ=C:\Contasol\Datos\3002019.MDB];

etc...

Tras cada conexión debo hacer el mismo procedimiento de carga de tablas para que se vayan concatenando. El problema es la clave ID_Iva, que se repite en cada empresa por lo que, para diferenciarlas debería hacer algo similar a:

'EMPRESA-X' & NUM(MAX(CIVAPU),'00000') as ID_Iva

Y que la clave funcione correctamente. El caso es que esa expresión me da error de controlador en el SELECT:

SELECT
	ASIAPU							as Asiento,
	MAX(CIVAPU)						as ID_Iva,
	MAX(DEPAPU)						as IDDepartamento,
	MAX(SUBAPU)						as IDSubdepartamento
	
  	FROM F_APU WHERE YEAR(FECAPU)=2019 GROUP BY ASIAPU;

Supongo que la solución pasaría por recargar la tabla a posteriori para formatear la clave ID_Iva y seguir el mismo proceso para el resto de conexiones... pero cómo? esa es mi duda.

 

rubenmarin

Habría varias formas, una podría ser tener una tabla donde se vayan añadiendo los datos de cada empresa:
// Inicializar tabla
TablaFinal: LOAD * Inline [dumbField]

// Carga Empresa1 con todos los joins
...
// Añadir tabla Empresa1 a TablaFinal y borrar
Concatenate (TablaFinal) LOAD *, 'Empresa-1' as Empresa resident TablaEmpresa1;
DROP table TablaEmpresa1;

// Carga Empresa2 con todos los joins
...
// Añadir tabla Empresa2 a TablaFinal y borrar
Concatenate (TablaFinal) LOAD *, 'Empresa-2' as Empresa resident TablaEmpresa2;
DROP table TablaEmpresa2;

También se podría usar un for each y usar variables:
For each vEmpresa in '300','400'
ODBC CONNECT32 TO [MS Access Database;DBQ=C:\Contasol\Datos\$(vEmpresa )2019.MDB];

// Carga vEmpresa con todos los joins
...
// Añadir a TablaFinal y borrar
Concatenate (TablaFinal) LOAD *, '$(vEmpresa)' as Empresa resident tmpEmpresa;
DROP table tmpEmpresa;

Next