Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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?
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
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
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
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;
uchas gracias Diego si me funciono