Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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!!
Hola Jorge
No se cual estarás usando si el Sence o el View, pero en Qlikview, basta y sobra que los campos de las distintas tablas tengan el mismo nombre para que se relaciones, en caso desees que estas se junten en una sola tabla deberás aplicar el Join , mira la imagen que adjunto con ello podrás tener una idea de como relacionar las tablas
Bien, esta consulta me da la vista que perseguía:
SELECT a.id_iva, i.cuenta, i.total, d.descripcion AS departamento, s.descripcion AS subdepartamento
FROM(SELECT asiento, MAX(id_iva) AS id_iva, MAX(id_departamento) AS id_dep, MAX(id_subdepartamento) AS id_sub FROM apuntes
GROUP BY asiento) AS a
LEFT JOIN Iva AS i ON a.id_iva = i.id_iva
LEFT JOIN departamentos AS d ON id_dep = d.id_departamento
LEFT JOIN subdepartamento AS s ON id_sub=s.id_subdepartamento
WHERE a.id_iva > 0
GROUP BY a.id_iva
El problema es que no sé cómo llevarlo al los LOAD de las tablas.
He intentado hacer la carga de las 4 tablas pero no hay manera, ando perdido... Con la consulta consigo "aplanar" la tabla apuntes (diario en mi esquema) pero no sé cómo hacer que funcione en el LOAD del script. Como digo, la consulta funciona y me da el resultado que busco, pero necesito "traducirla" correctamente a la sintaxis de Qlikview.
Cualquier ayuda será bienvenida!
Bueno lo que tendrías que hacer es cargar la primera tabla
// aca cargas la primera tabla
TABLA_MAESTRA:
Load
*
From [ruta y nombre del primer archivo] (qvd);
// acá unes la segunda tabla con la primera
Left join (TABLA_IVA)
*
From [ruta y nombre de l segundo archivo] (qvd);
// acá unes con la tercera tabla
Left Join (TABLA_IVA)
*
From [ruta y nombre del tercer archivo] (qvd);
// acá unes la cuarta tabla
Left Join (TABLA_IVA)
*
From [ruta y nombre del cuarto archivo] (qvd);
// Al final te quedara la tabla 'TABLA_MAESTRA', LA CUAL contendrá la información de los 4 archivos.
Ojala te pueda ayudar en algo
Gracias, pero no es la solución. Además de usar el Join, tengo un problema con la tabla Diario, la cuál tiene clave compartida con la tabla IVA a través de la clave ID_Iva, pero necesito hacer un join también a través de IDDepartamento y IDSubdepartamento en cuyas filas siempre saldrá ID_Iva a "0". Lo que vengo a necesitar básicamente es cómo "traducir" esta sentencia SQL que puse más arriba unas sentencias LOAD. Sobre todo la subconsulta.
Por cierto, estoy usando ODBC, leo las tablas de una base Access.
Hola Jorge.
Como te dice Carlos, puedes cargar las tablas individualmente sin necesidad de hacer una select compleja. QlikView (o Sense) ya se encarga de unir las tablas por le nombre del campo. Luego puedes usar los campos individuales para hacer tu presentación de la derecha sin necesidad de hacer joins complejos.
En cuanto a cargar de access, basta con elegir el driver específico. Tienes que elegir el driver OLDB "Micosoft Jet 4.0 OLE DB Provider" de 32 bits
Gracias. Lo cierto es que cargando las tablas normalmente no funciona. La tabla diario se compone de grupos de registros con el mismo número de asiento, en uno de esos registros, figura el id_iva que se relaciona con la tabla IVA, pero en los otros dos registros que conforman el asiento en la tabla diario, el id_iva=0. Lo mismo pasa con el departamento y subdpt.,
Subo el qwv para que se pueda entender mejor. Creo que el load debería incluir una subconsulta o algo parecido, pero no sé cómo implementarlo. La sentencia SQL que puse arriba, como digo, me da la vista que necesito, es decir, mostrar la tabla IVA con su departamento y sudbdepartamento correspondiente.
Gracias por vuestro interés.
Muchas gracias Rubén, ahí estaba el quiz.. en "aplanar" los asientos en la tabla Diario. Intentándolo hacer, me daba errores en la sintaxis, al final quedó así y funciona ok.
ODBC CONNECT32 TO [MS Access Database;DBQ=C:\Contasol\Datos\4002019.MDB]; DIARIO: 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; IVA: LEFT JOIN (DIARIO) LOAD CODIVS as ID_Iva, FECIVS as Fecha, CUEIVS as CContable, CIFIVS as NIF, NOMIVS as Denominación, .... etc etc..