FoxPro/Visual FoxPro - para expertos en SQL

 
Vista:

para expertos en SQL

Publicado por xx (378 intervenciones) el 06/09/2010 03:39:44
Tengo una duda estoy trabajando con sentencias SQL y no logro hacer funcionar esta consulta :

SELECT DFACA.CODIGO,SUM(CANTID) AS VCANTID FROM DFACA INNER JOIN CFACA ON DFACA.NCOMPR==CFACA.NCOMPR;
INTO TABLE (_ctmp+[AUXIL2.DBF]);
WHERE DFACA.CODIGO IN (SELECT CODIGO FROM AUXIL1) AND BETWEEN( CFACA.FECHA, _fec1, _fec2 );
GROUP BY DFACA.CODIGO;
UNION;
SELECT DFACB.CODIGO,SUM(CANTID) AS VCANTID FROM DFACB INNER JOIN CFACB ON DFACB.NCOMPR==CFACB.NCOMPR;
WHERE DFACB.CODIGO IN (SELECT CODIGO FROM AUXIL1) AND BETWEEN( CFACB.FECHA, _fec1, _fec2 );
GROUP BY DFACB.CODIGO;
UNION;
SELECT DFACC.CODIGO,SUM(CANTID) AS VCANTID FROM DFACC INNER JOIN CFACC ON DFACC.NCOMPR==CFACC.NCOMPR;
WHERE DFACC.CODIGO IN (SELECT CODIGO FROM AUXIL1) AND BETWEEN( CFACC.FECHA, _fec1, _fec2 );
GROUP BY DFACC.CODIGO;
UNION;
SELECT DDEVA.CODIGO,SUM(-CANTID) AS VCANTID FROM DDEVA INNER JOIN CDEVA ON DDEVA.NCOMPR==CDEVA.NCOMPR;
WHERE DDEVA.CODIGO IN (SELECT CODIGO FROM AUXIL1) AND BETWEEN( TTOD(CDEVA.FECHA), _fec1, _fec2 );
GROUP BY DDEVA.CODIGO;
UNION;
SELECT DDEVB.CODIGO,SUM(-CANTID) AS VCANTID FROM DDEVB INNER JOIN CDEVB ON DDEVB.NCOMPR==CDEVB.NCOMPR;
WHERE DDEVB.CODIGO IN (SELECT CODIGO FROM AUXIL1) AND BETWEEN( TTOD(CDEVB.FECHA), _fec1, _fec2 );
GROUP BY DDEVB.CODIGO

se basa en 5 tablas para obtener los articulos que se vendieron en un perido de fechas _fec1 y _fec2 y solo los registros que existan en AUXIL1

DFACA, DFACB, DFACC contienen detalles de los productos vendidos por facturas y DDEVA,DDEVB contienen detalles de productos que se hicieron devoluciones o notas de creditos y necesito que las cantidades de las tres primeras tablas sean restadas de las 2 segundas tablas pero me saca esto

AUXIL2
codprod cantid
00001 10
00001 -1
00002 8
00003 12

y yo necesitaria que sea este el resultado
AUXIL2
codprod cantid
00001 9
00002 8
00003 12

ojala me puedan ayudar, esto de pasarse a SQL no es simple, escucho sugerencias si las tienen, gracias de todos modos!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:para expertos en SQL

Publicado por michael (10 intervenciones) el 06/09/2010 20:08:24
prueba lo siguiente , talves te funcione.

HAS un select general a todos tus select union
con group by
DDEVB.CODIGO

select x.campo1,x.camp2,x.campo3 from
(
select ...
union
select...
select
union
) x
GROUP BY x.campo1,x.campo2

saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:para expertos en SQL

Publicado por es_binario (757 intervenciones) el 06/09/2010 20:32:27
que version de foxpro estas usando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:para expertos en SQL

Publicado por xx (378 intervenciones) el 06/09/2010 20:57:59
Gracias a todos: la solución fue ejecutar una segunda consulta sobre los resultados agrupandolos de la misma manera o sea:

SELECT CODIGO,SUM(VCANTID) AS VCANTID FROM AUXIL2 INTO CURSOR XCURSOR GROUP BY AUXIL2.CODIGO

y la version que utilizo es la vfp6 la diferencia con las demas es la agrupacion o GROUP BY que tenes que meterle mas campos.

es muy raro en SQL no siempre se puede llegar a los resultados esperados de una vez!!, pero supongo que esto debe ser asi.

y la verdad no sabia que se podia utilizar una consulta en la clausula FROM lo voy a probar si resulta les comento, de todos modos gracias por su tiempo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar