Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Hacer una Suma en SQL

Estas en el tema de Hacer una Suma en SQL en el foro de SQL Server en Foros del Web. Hola espero que tengan un buen día todos, y espero alguien me pueda auxiliar en esta consulta, me urge y pues de favor ayuden me ...
  #1 (permalink)  
Antiguo 10/07/2011, 18:36
Avatar de kuriel  
Fecha de Ingreso: febrero-2009
Mensajes: 240
Antigüedad: 15 años, 2 meses
Puntos: 4
Mensaje Hacer una Suma en SQL

Hola espero que tengan un buen día todos, y espero alguien me pueda auxiliar en esta consulta, me urge y pues de favor ayuden me :)

Problematica:

Tengo 2 tablas:


1. Folios
===========
OrdenPago
IDImpuesto




2. Impuestos
===========
IDImpuesto
Concepto
Cantidad
Ano


Estan relacionadas por IDImpuesto, IDImpuesto de la tabla "Impuestos" es PK.

Y lo que se desea es que se muestre el
LISTADO DEL TOTAL POR CADA CONCEPTO DE PAGO ORDENADO POR AÑO.

osea, supongamos que hay varios registros en:

Folios:

OrdenPago / IDImpuesto
1 / 10
1 / 20
1 / 11
2 / 10
3 / 20
3 / 11


Y registros en:

Impuestos:

IDImpuesto / Concepto / Cantidad / Ano

10 / Agua / 300 / 2005
11 / Agua / 200 / 2006
20 / Predio / 500 / 2005


¿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


osea el total de las veces que se ha pagado cada concepto pero por año.

Gracias espero alguien sea el Genio que me pueda ayudar, gracias de antemano, les dejo mi futuro en sus manos xP jaja saludos.
__________________
Si todas las URL's que tienes o visitas te parecen largas, visita www.korto.tk - También protege de rastros y con contraseñas tus páginas o URL's.
  #2 (permalink)  
Antiguo 10/07/2011, 22:22
Avatar de kuriel  
Fecha de Ingreso: febrero-2009
Mensajes: 240
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Hacer una Suma en SQL

cabe mencionar que ya llevo 2 dias buscando la manera y no la encuentro, es tarde por aca y necesito entregar esto para mañana en la escuela del turno matutino xP saludos a todos.
__________________
Si todas las URL's que tienes o visitas te parecen largas, visita www.korto.tk - También protege de rastros y con contraseñas tus páginas o URL's.
  #3 (permalink)  
Antiguo 11/07/2011, 08:28
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Hacer una Suma en SQL

Hola kuriel:

Vamos por partes... te recuerdo que el foro no sirve para pedir que te hagan la tarea, sino para ayudarte a resolver dudas que tengas sobre la misma, pero quien debe hacer el trabajo a fin de cuentas eres tú.

Dices que llevas dos días buscando la respuesta y aun no haz dado con ella, pero no pones en tu post ningún código que nos muestre qué es lo que haz intentado hacer, siempre que publiques algo en en el foro es conveniente que además de los datos y la estructura de tus tablas (que nos sirven para pruebas) pongas también algo del código con el que vienes trabajando, para ayudarte a afinarlo o en su defecto darte alguna otra alternativa o sugerencia.

En cuanto a los datos, tengo mis dudas con cuanto cómo obtienes la salida, ya que por ejemplo para el IDImpuesto = 20 aparece dos veces en tu tabla Folios, para las OrdenPago 1 y 3 respectivamente,

Código:
OrdenPago / IDImpuesto
1 / 10
1 / 20
1 / 11
2 / 10
3 / 20
3 / 11

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
Esta consulta no debería tener problemas para alguien con conocimientos básicos de SQL, solo sería cuestión de hacer un INNER JOIN y una SUMA, AGRUPANDO por los campos comunes.

Seguramente a estas alturas ya debiste entregar el trabajo en la escuela y es posible que tu profesor te haya dado la respuesta, pero espero sinceramente que tomes en consideración lo que te digo para un futuro.

Saludos
Leo.
  #4 (permalink)  
Antiguo 11/07/2011, 16:02
Avatar de kuriel  
Fecha de Ingreso: febrero-2009
Mensajes: 240
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Hacer una Suma en SQL

Hola de nuevo a todos, pues déjame comentarte, afortunadamente y justo cuando el profesor iba a revisar, logré hacer la consulta correctamente, no me dio la respuesta el profesor, si, asi es la vida jaja.

Con respecto a tu comentario, tampoco espero que me hagan la tarea, visito este foro por que sé que hay gente que lleva mas tiempo trabajando con estos sistemas y que hay mas probabilidad de éxito, puesto que no me resultaban mis intentos.

Me tome buen tiempo checando mi post para que no faltara nada en cuanto a detalles y me pudieran auxiliar, me falto poner código SQL para la consulta, gracias por hacer énfasis y sólo notar que me falto eso.

Pues como ya escribí, la tarea ya fue entregada y pues ahora si que tuve suerte de que la consulta fuera correcta al último momento jaja.

Gracias por la ayuda.
__________________
Si todas las URL's que tienes o visitas te parecen largas, visita www.korto.tk - También protege de rastros y con contraseñas tus páginas o URL's.
  #5 (permalink)  
Antiguo 12/07/2011, 07:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Hacer una Suma en SQL

Hola de nuevo kuriel:

Me da gusto que hayas dado con la consulta por tu propia cuenta, sin embargo me hubiera gustado más que la compartieras con el foro, por si a alguien más le puede interesar.

Con respecto a mi comentario, pudiera parecer bastante duro, pero creo que varios de aquí opinarían lo mismo, sobre todo cuando mencionas una hora límite para poder ayudarte... tal pareciera una exigencia más que una petición. Mi intención no era que resultara ofensiva pero si así fue te pido una disculpa.

Tampoco aclaras la duda que te comenté acerca de registro para el idImpuesto = 20, sería conveniente que cuando comparta las consulta que obtuviste nos aclares también este punto.

Finalmente un comentario adicional, pasar dos días para resolver una consulta es una verdadera pérdida de tiempo, cuando más deberías pasar un par de horas tratando de encontrar una solución. Si después de ese tiempo sigues sin obtener resultados lo mejor es que te des un descanso y busques un poco de ayuda.

Saludos
Leo.
  #6 (permalink)  
Antiguo 18/07/2011, 13:45
Avatar de kuriel  
Fecha de Ingreso: febrero-2009
Mensajes: 240
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Hacer una Suma en SQL

Cita:
Iniciado por leonardo_josue Ver Mensaje
Tampoco aclaras la duda que te comenté acerca de registro para el idImpuesto = 20
Código:
OrdenPago / IDImpuesto
1 / 10
1 / 20
1 / 11
2 / 10
3 / 20
3 / 11
Bueno lo ke hace esos registros es de que nos dice qué impuestos se pagaron en la Orden de Pago 1, cuales impuestos en la 2... y asi sucesivamente.

NOTA: pero era suposicion, en mi BD se tienen otros registros, por eso a continuación les digo como aparece en mi BD:


Bueno pues la consulta que realiza esa función ya mencionada es:

Código SQL:
Ver original
  1. SELECT SUM(Cantidad),Concepto,Ano
  2. FROM (Folios INNER JOIN Impuestos
  3. ON Folios.IDImpuesto=Impuestos.IDImpuesto)
  4. GROUP BY Folios.IDImpuesto, Impuestos.Concepto,Impuestos.Ano
  5. ORDER BY Impuestos.Ano

Me regresaba:

Código:
(Sin nombre de columna)  | Concepto | Ano
------------------------------------------
600.00                   | Agua     | 2005
700.00                   | Predio   | 2005
1200.00                  | Agua     | 2006

por que el precio del Agua 2005 es de 300.00 y del 2006 es de 600.00 y del predio son 700.00

Saludos a todos, espero a alguien le sirva n.n

Última edición por kuriel; 18/07/2011 a las 13:59
  #7 (permalink)  
Antiguo 19/07/2011, 10:24
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.

Etiquetas: sql, suma, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:34.