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!!
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


0