FoxPro/Visual FoxPro - suma en consultas

   
Vista:

suma en consultas

Publicado por José A. García (39 intervenciones) el 10/04/2012 00:43:38
Necesito hacer una consulta para sumar el total de las facturas de un año y el total por trimestres.


SELECT Factura.codcliente, Clientes.nombre,;
SUM(Factura.totalfactura) AS acumulado;
FROM ;
TABLAS!FACTURA,;
TABLAS!CLIENTES;
WHERE Factura.codcliente = Clientes.codigo;
GROUP BY Factura.codcliente, Clientes.nombre;
HAVING ( acumulado ) > ( 0 )

por otro lado necesito sumar el total por trimestres, por ejemplo primer trimestre:

SELECT Factura.codcliente, Clientes.nombre,;
SUM(Factura.totalfactura) AS trimestre1;
FROM ;
TABLAS!FACTURA,;
TABLAS!CLIENTES;
WHERE Factura.codcliente = Clientes.codigo AND QUARTER(factura.fecha) = 1 ;
GROUP BY Factura.codcliente, Clientes.nombre

Pero no se como hacer para que en la misma consulta aparezcan los dos campos (acumulado y trimestre1)

Muchas gracias por vuestro tiempo.
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
Imágen de perfil de Angel

suma en consultas

Publicado por Angel angel_aguedo@hotmail.com (11 intervenciones) el 13/04/2012 05:35:29
bueno, se entiende la idea
primero vamos a crear un prg, por ejemplo VENTAS.PRG
y copiamos el siguiente código:
es sólo para generar información de ejemplo

CLOSE DATABASES ALL
CREATE CURSOR clientes (nombre c(20))
INSERT INTO clientes VALUES ('WINDOWS 7')
INSERT INTO clientes VALUES ('WINDOWS XP')
INSERT INTO clientes VALUES ('APPLE')
INSERT INTO clientes VALUES ('LINUX')
CREATE CURSOR ventas (fecha d, cliente c(20), ventas n(10,2))
FOR i=1 TO 1000
nAño=numeroz(2011,2012)
nMes=numeroz(1,12)
nDia=numeroz(1,DAY(GOMONTH(DATE(nAño,nMes,1),1)-1))
INSERT INTO ventas VALUES (DATE(nAño,nMes,nDia),clientex(),numeror(10,100))
ENDFOR
GO TOP
BROWSE && información de ejemplo

FUNCTION numeroz && número entero aleatorio
PARAMETERS i, j
RETURN INT((j-i+1)*RAND()+i)

FUNCTION numeror && número real aleatorio
PARAMETERS a, b
RETURN (b-a)*RAND()+a

FUNCTION clientex && cualquier cliente del cursor clientes
SELECT clientes
GO numeroz(1,RECCOUNT())
RETURN nombre

ahora vayamos a la ventana de comandos y ejecutémoslo así:

DO ventas

como vemos, se ha creado un cursor con información que necesitamos.
bien, ahora creamos otro prg, por ejemplo CONSULTAR.PRG
y copiamos el siguiente código:

PARAMETERS cCliente, nAño, nTrimestre
IF VARTYPE(cCliente)<>'C'
cCliente=''
ENDIF
IF VARTYPE(nAño)<>'N' OR !BETWEEN(nAño,100,9999)
nAño=YEAR(DATE())
ENDIF
IF VARTYPE(nTrimestre)<>'N' OR !BETWEEN(nTrimestre,1,4)
nTrimestre=0
ENDIF
SET DELETED ON
IF nTrimestre=0 && consulta por cliente y año
SELECT * FROM ;
(SELECT cliente, YEAR(fecha) as año, SUM(ventas) as ventas ;
FROM ventas ;
GROUP BY cliente, año) subconsulta ;
WHERE ALLTRIM(cliente)==ALLTRIM(cCliente) AND año=nAño ;
INTO CURSOR curResultado
ELSE && consulta por cliente, año y trimestre
SELECT * FROM ;
(SELECT cliente, YEAR(fecha) as año, QUARTER(fecha) as trimestre, SUM(ventas) as ventas ;
FROM ventas ;
GROUP BY cliente, año, trimestre) subconsulta ;
WHERE ALLTRIM(cliente)==ALLTRIM(cCliente) AND año=nAño AND trimestre=nTrimestre ;
INTO CURSOR curResultado
ENDIF
BROWSE && finalmente mostramos lo que queremos

bien, veamos por ejemplo las ventas de WINDOWS 7 para el año 2012:
en la ventana de comandos escribimos:

DO CONSULTAR WITH 'WINDOWS 7', 2012

las ventas de WINDOWS 7, año 2012, 3er trimestre:

DO CONSULTAR WITH 'WINDOWS 7', 2012, 3

las ventas de APPLE, año 2011, 2do bimestre:

DO CONSULTAR WITH 'APPLE', 2011, 2

etc

más fácil imposible
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

suma en consultas

Publicado por José A. Garcia (39 intervenciones) el 14/04/2012 10:13:38
Gracias Ángel.
Te explico la idea. En España, al final del ejercicio fiscal, las empresas tienen que presentar en La Hacienda Pública una relación de todas las empresas a las que se les ha facturado mas de 3.000 Euros en ese año; pero a partir de ahora te piden que detalles que parte de esa cantidad corresponde a cada trimeste. Por ello necesito hacer un informe en el que quede reflejado SOLO LAS EMPRESAS QUE SUPEREN ESA CANTIDAD y que parte de eso mas de 3.000 € corresponden a cada trimestre.

Después de hacer la pregunta en el foro, he hecho una vista para todo el año y una vista para cada trimestre, al final he juntado las cinco en una sola y "me funciona." No se si será la forma correcta de hacerlo, pero creo que va bien.
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