Ver Mensaje Individual
  #7 (permalink)  
Antiguo 19/07/2011, 10:24
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Hacer una Suma en SQL

Hola de nuevo Kuriel:

Gracias por compartir la solución con el foro. Si alguien más tiene un problema similar esto seguro que le podrá servir.

Cuando te pedí que aclararas la duda con el registro en tu tabla folios era porque el resultado que estabas poniendo como salida no correspondía con lo que debería salir, puede ser por que eran datos de ejemplo y no datos reales, pero es importante que cuides este aspecto en un futuro. Si tomas los datos que pones de ejemplo y ejecutas la misma consulta a la que llegaste (solo quité los paréntesis que en realidad no sirven para nada y utilicé alias en las tablas) tienes lo siguiente:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE Folios (OrdenPago INT, IDImpuesto INT);
  2. Query OK, 0 rows affected (0.23 sec)
  3.  
  4. mysql> INSERT INTO Folios VALUES
  5.     -> (1, 10),(1, 20),(1, 11),(2, 10),(3, 20),(3, 11);
  6. Query OK, 6 rows affected (0.07 sec)
  7. Records: 6  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * FROM Folios;
  10. +-----------+------------+
  11. | OrdenPago | IDImpuesto |
  12. +-----------+------------+
  13. |         1 |         10 |
  14. |         1 |         20 |
  15. |         1 |         11 |
  16. |         2 |         10 |
  17. |         3 |         20 |
  18. |         3 |         11 |
  19. +-----------+------------+
  20. 6 rows in set (0.00 sec)
  21.  
  22. mysql> CREATE TABLE Impuestos (IDImpuesto INT, Concepto VARCHAR(20),
  23.     -> Cantidad INT, Ano INT);
  24. Query OK, 0 rows affected (0.13 sec)
  25.  
  26. mysql> INSERT INTO Impuestos VALUES (10, 'Agua', 300, 2005),
  27.     -> (11, 'Agua', 200, 2006),(20, 'Predio', 500, 2005);
  28. Query OK, 3 rows affected (0.03 sec)
  29. Records: 3  Duplicates: 0  Warnings: 0
  30.  
  31. mysql> SELECT * FROM Impuestos;
  32. +------------+----------+----------+------+
  33. | IDImpuesto | Concepto | Cantidad | Ano  |
  34. +------------+----------+----------+------+
  35. |         10 | Agua     |      300 | 2005 |
  36. |         11 | Agua     |      200 | 2006 |
  37. |         20 | Predio   |      500 | 2005 |
  38. +------------+----------+----------+------+
  39. 3 rows in set (0.00 sec)
  40.  
  41. mysql> SELECT SUM(Cantidad),Concepto,Ano
  42.     -> FROM Folios F INNER JOIN Impuestos I
  43.     -> ON F.IDImpuesto=I.IDImpuesto
  44.     -> GROUP BY F.IDImpuesto, I.Concepto, I.Ano
  45.     -> ORDER BY I.Ano;
  46. +---------------+----------+------+
  47. | SUM(Cantidad) | Concepto | Ano  |
  48. +---------------+----------+------+
  49. |           600 | Agua     | 2005 |
  50. |          1000 | Predio   | 2005 |
  51. |           400 | Agua     | 2006 |
  52. +---------------+----------+------+
  53. 3 rows in set (0.00 sec)
  54.  
  55. mysql>

En tu post inicial decías esto:

Cita:
¿Como hago para que una consulta me muestre lo siguiente?:


Ano / Concepto / Cantidad
2005 / Agua / 600 <-- se pago dos veces agua
2005 / Predio / 500 <-- solo se ha pagado una vez
2006 / Agua / 400 <-- igual se pago dos veces agua pero del 2006
Es por eso que yo te pedía que explicaras cómo habías obtenido el resultado y más aún anticipaba la respuesta correcta:

Cita:
por lo tanto y a reserva de que nos expliques cómo estás sumando el resultado final debería ser un 1000 y no un 500 como expresas en tu post, quedando finalmente de la siguiente manera:

Código:
Ano         Concepto   cantidad
----------- ---------- -----------
2005        Agua       600
2005        Predio     1000
2006        Agua       400
En fin, me alegro que hayas encontrado la solución al problema por tu cuenta, después de todo resultó tal y como lo dije en el post:

Cita:
solo sería cuestión de hacer un INNER JOIN y una SUMA, AGRUPANDO por los campos comunes.

NOTA: El ejemplo está en MySQL, porque en estos momentos no tengo acceso a ningún SQL Server, pero es válido también para este motor

Saludos
Leo.