SQL - Totalizar un campo por un año concreto

 
Vista:
sin imagen de perfil

Totalizar un campo por un año concreto

Publicado por Matmax (4 intervenciones) el 09/01/2011 13:50:51
Hola buenos dias/tardes. Tengo un problema con una consulta sql y ne estoy volviendo un poco loco. No se si alguien podria ayudarme, si es asi gracias de antemano

Tengo 2 tablas:
Proveedor(codPro, nombre, apellidos….)
Pedido( CodCompra, fecha, codPro, …..totalCompra).

La consulta que quiero hacer es que me saque un registro por Proveedor, con su total de compras de un año determinado que le pasare a la consulta, y me lo añada a una 3º tabla con la siguiente estructura:

Facturación (CodFact, codPro, fecha, nombre, apellidos, totalComp(Total Comprado))

Para probar utilice el cliente 9777 y el año 2009. La sql que genere es esta:

INSERT INTO Facturación (Codfact, codPro, nombre, apellidos, totalComp)

SELECT Proveedor. codPro, Proveedor.nombre, Proveedor.apellidos, Sum(pedido.totalfactura_mov) AS Sumadetotalfactura_mov, pedido.fecha

FROM pedido INNER JOIN clientes ON pedido.numero = Proveedor.numero

GROUP BY Proveedor.numero, Proveedor.nombre, Proveedor.apellidos, pedido.fecha

HAVING (((Proveedor.numero)=9777) AND ((Year([pedido]![fecha]))=2009));

El problema que tengo es que en lugar de sacarme un registro con el total de las compras de ese año de ese proveedor, me sale un registro de ese proiveedor por pedido realizado y el total de dicho pedido.
Si alguien me puede ayudar le doy las gracias. Un saludo.
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:Totalizar un campo por un año concreto

Publicado por Miguel (16 intervenciones) el 10/01/2011 08:55:00
El problema es que estás incluyendo la fecha.
Te está sacando un registro por proveedor y fecha.
No entiendo que incluyas la fecha cuando en la tabla en la que insertas ni siquiera está este dato.
Quitala y problema solucionado.

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
sin imagen de perfil

RE:Totalizar un campo por un año concreto

Publicado por matmax (4 intervenciones) el 10/01/2011 23:34:44
Buenas, gracias por responder. A la hora de escribir en el foro, se me olvido añadir en el insert into el campo fecha.

Con respecto a lo de eliminar el campo fecha, si lo hago, me hara sumatorio de todos los registros que tengo fichado ese proveedor durante los años y no es lo que pretendo, el campo fecha es para que los totalice dentro de una fecha o un intervalo de fechas, en este caso, seria dentro de un año (2009). La consulta corregida seria asi:

INSERT INTO Facturación (Codfact, codPro, fecha, nombre, apellidos, totalComp)

SELECT Proveedor. codPro, Proveedor.nombre, Proveedor.apellidos, Sum(pedido.totalfactura_mov) AS Sumadetotalfactura_mov, pedido.fecha

FROM pedido INNER JOIN clientes ON pedido.numero = Proveedor.numero

GROUP BY Proveedor.numero, Proveedor.nombre, Proveedor.apellidos, pedido.fecha

HAVING (((Proveedor.numero)=9777) AND ((Year([pedido]![fecha]))=2009));

Por ejemplo: tienes un proveedor que te lleva comprando 5 años y quieres saber cuanto te compro el año pasado. Para eso es la sql que estoy intentando hacer. De nuevo muchas gracias y un saludo.
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:Totalizar un campo por un año concreto

Publicado por Miguel (16 intervenciones) el 11/01/2011 09:46:17
Pero no puedes totalizar por año si incluyes el campo fecha.
Te hará un registro por cada proveedor y fecha.

Si quieres filtrar por el campo fecha ponlo en el WHERE no te hace falta incluirlo en el SELECT.

Hasta que no quites el campo fecha no podrás hacer lo que quieres.

INSERT INTO Facturación (Codfact, codPro, nombre, apellidos, totalComp)
SELECT Proveedor. codPro, Proveedor.nombre, Proveedor.apellidos, Sum(pedido.totalfactura_mov) AS Sumadetotalfactura_mov
FROM pedido INNER JOIN clientes ON pedido.numero = Proveedor.numero
WHERE Proveedor.numero=9777 AND Year([pedido]![fecha])=2009
GROUP BY Proveedor.numero, Proveedor.nombre, Proveedor.apellidos;

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
sin imagen de perfil

RE:Totalizar un campo por un año concreto

Publicado por matmax (4 intervenciones) el 11/01/2011 16:06:18
Buenas, gracias por respnder, lo hare como comentas, un saludo.
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:Totalizar un campo por un año concreto

Publicado por Ariel Bálsamo (9 intervenciones) el 13/01/2011 15:32:19
Hola. Como te explicó Miguel, el problema es que estás agrupando por fecha. Entonces obtienes un registro agrepado por cada día. Si lo que quieres es que los agrupe sólo por el año, entonces no puedes colocar la fecha entera, sino únicamente el año. Además imagino que quieres que cargue el año en la tabla agrupada para saber a qué año corresponde esa fila. Finalmente imagino que el HAVING es sólo para probar la consulta.
Así quedaría:

INSERT INTO Facturación (Codfact, codPro, fecha, nombre, apellidos, totalComp)
SELECT Proveedor.codPro, YEAR(pedido.fecha), Proveedor.nombre, Proveedor.apellidos, Sum(pedido.totalfactura_mov) AS Sumadetotalfactura_mov
FROM pedido INNER JOIN clientes ON pedido.numero = Proveedor.numero
GROUP BY Proveedor.codPro, YEAR(pedido.fecha), Proveedor.nombre, Proveedor.apellidos
HAVING Proveedor.numero=9777 AND Year(pedido.fecha=2009;

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
sin imagen de perfil

RE:Totalizar un campo por un año concreto

Publicado por matmax (4 intervenciones) el 13/01/2011 21:01:33
Muchas gracias Ariel esta era la consulta que trato de hacer, como tu comentas al agrupar por fecha sale un registro por dia, y el having es simplemente para probar lo que sale en la consulta. Luego en ms access le pasare el parametro de fecha, para sacar del año que quiero. Un saludo y mil gracias, eres un crack. ;)
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