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

union de 2 tablas en la carga

Buenos dias, tengo un inconveniente, me conecto por odbc a una base de datos oracle y en esa bd tengo 2 tablas que son:

GAS.QV_MOVISUSCCUEN y GAS.QV_CLIENTES yo necesito que en la capa de extraccion estas 2 tablas se unan por ANO, MES y NUMESERV, lo hago de esta manera:

prueba:
LOAD
    
NUMESERV as codigo ,
    
ANO as ano,
    
CATEGORIA as categoria,
    
CENTRO_BENEFICIO as cebe,
    
SECTOR_OPERA as sector,
   
COD_CENTROCOSTO as cecos,
   
CUENTA_CONTABLE as cuenta,
   
MES as mes,
   
ORDE_INTERNA as orden1,
   
ORDEN_INTERNA as orden2,
   
VALOR as valor;
SQL SELECT
     GAS.QV_MOVISUSCCUEN.NUMESERV,
     GAS.QV_MOVISUSCCUEN.ANO,
     GAS.QV_CLIENTES.CATEGORIA,
     GAS.QV_CLIENTES.CENTRO_BENEFICIO,
     GAS.QV_CLIENTES.SECTOR_OPERA
    GAS.QV_MOVISUSCCUEN.COD_CENTROCOSTO,
    GAS.QV_MOVISUSCCUEN.CUENTA_CONTABLE,
    GAS.QV_MOVISUSCCUEN.MES,
    GAS.QV_MOVISUSCCUEN.ORDE_INTERNA,
    GAS.QV_MOVISUSCCUEN.ORDEN_INTERNA,
    GAS.QV_MOVISUSCCUEN.VALOR
FROM GAS.QV_MOVISUSCCUEN,GAS.QV_CLIENTES
where  GAS.QV_MOVISUSCCUEN.ANO=2013 and
GAS.QV_MOVISUSCCUEN.MES=1 and
GAS.QV_MOVISUSCCUEN.ANO=GAS.QV_CLIENTES.ANO and
GAS.QV_MOVISUSCCUEN.MES=GAS.QV_CLIENTES.MES and
GAS.QV_MOVISUSCCUEN.NUMESERV=GAS.QV_CLIENTES.NUMESERV;

STORE prueba into prueba.qvd(qvd);
DROP Table prueba;

Me arroja un error de que el from esta donde no se espera, que error puede existir??, esto que intento hacer se puede hacer en la capa de extraccion o me tocaria crear una vista en oracle con esta consulta y simplemente cargar la vista?

1 Solution

Accepted Solutions
Not applicable
Author

Gracias Diego podrias indicarme la sintaxis

(

La otra opción es que en la sentencia SQL traigas las dos tablas pero utilizando left join y no traer las tablas por separado, como en la opción anterior)

es primera vez que voy a hacer esta union

View solution in original post

4 Replies
Anonymous
Not applicable
Author

Hola Luis,

el error que tienes es que estas intentado traer en una misma sentencia SQL las dos tablas esto no es posible o por lo menos como lo estas haciendo no es posible.

Una opción es traer las dos tablas por separadas y luego unirlas por los 3 campos utilizando la función Left join

// Primera tabla

MOVISUSCCUEN:

LOAD
    
NUMESERV as codigo ,
    
ANO as ano,
   
COD_CENTROCOSTO as cecos,
   
CUENTA_CONTABLE as cuenta,
   
MES as mes,
   
ORDE_INTERNA as orden1,
   
ORDEN_INTERNA as orden2,
   
VALOR as valor;
SQL SELECT
     GAS.QV_MOVISUSCCUEN.NUMESERV,
     GAS.QV_MOVISUSCCUEN.ANO,
    GAS.QV_MOVISUSCCUEN.COD_CENTROCOSTO,
    GAS.QV_MOVISUSCCUEN.CUENTA_CONTABLE,
    GAS.QV_MOVISUSCCUEN.MES,
    GAS.QV_MOVISUSCCUEN.ORDE_INTERNA,
    GAS.QV_MOVISUSCCUEN.ORDEN_INTERNA,
    GAS.QV_MOVISUSCCUEN.VALOR
FROM GAS.QV_MOVISUSCCUEN
where  GAS.QV_MOVISUSCCUEN.ANO=2013 and
GAS.QV_MOVISUSCCUEN.MES=1;

// Segunda Tabla

Left join(MOVISUSCCUEN)

QV_CLIENTES:

LOAD
    
NUMESERV as codigo ,
    
ANO as ano,
    
CATEGORIA as categoria,
    
CENTRO_BENEFICIO as cebe,
    
SECTOR_OPERA as sector,
   
MES as mes;
SQL SELECT
     GAS.QV_CLIENTES.ANO,

    GAS.QV_CLIENTES.NUMESERV,

     GAS.QV_CLIENTES.MES
     GAS.QV_CLIENTES.CATEGORIA,
     GAS.QV_CLIENTES.CENTRO_BENEFICIO,
     GAS.QV_CLIENTES.SECTOR_OPERA
FROM GAS.QV_CLIENTES
where  GAS.QV_MOVISUSCCUEN.ANO=2013 and
GAS.QV_MOVISUSCCUEN.MES=1;

Store MOVISUSCCUEN into MOVISUSCCUEN.qvd(qvd);

drop table MOVISUSCCUEN;

La otra opción es que en la sentencia SQL traigas las dos tablas pero utilizando left join y no traer las tablas por separado, como en la opción anterior

Not applicable
Author

Gracias Diego podrias indicarme la sintaxis

(

La otra opción es que en la sentencia SQL traigas las dos tablas pero utilizando left join y no traer las tablas por separado, como en la opción anterior)

es primera vez que voy a hacer esta union

Anonymous
Not applicable
Author

La primera opción que te mostre es igual a la segunda, solo que no poseo muchos conocimientos sobre Sentencias SQL

prueba:

LOAD
    
NUMESERV as codigo ,
    
ANO as ano,
    
CATEGORIA as categoria,
    
CENTRO_BENEFICIO as cebe,
    
SECTOR_OPERA as sector,
   
COD_CENTROCOSTO as cecos,
   
CUENTA_CONTABLE as cuenta,
   
MES as mes,
   
ORDE_INTERNA as orden1,
   
ORDEN_INTERNA as orden2,
   
VALOR as valor;
SQL SELECT
     movi.NUMESERV,
     movi.ANO,
     cli.CATEGORIA,
     cli.CENTRO_BENEFICIO,
     cli.SECTOR_OPERA
    movi.COD_CENTROCOSTO,
    movi.CUENTA_CONTABLE,
    movi.MES,
    movi.ORDE_INTERNA,
    movi.ORDEN_INTERNA,
    movi.VALOR
FROM GAS.QV_MOVISUSCCUEN movi

Left join GAS.QV_CLIENTES Cli on (movi.ANO = cli.ANO) and (movi.mes = cli.MES) and (movi.NUMESERV = cli.NUMESERV)
where  movi.ANO=2013 and
movi.MES=1;

STORE prueba into prueba.qvd(qvd);
DROP Table prueba;

Not applicable
Author

uchas gracias Diego si me funciono