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

Uso de SUM()

Estas en el tema de Uso de SUM() en el foro de SQL Server en Foros del Web. Veran ustedes tengo una tabla con registros indexados por un Nº de Transaccion... algo asi.... nro_trans cuenta fecha valor signo 509609 36100501 2009-01-01 00:00:00.000 2385208561.60 ...
  #1 (permalink)  
Antiguo 21/04/2009, 09:14
 
Fecha de Ingreso: mayo-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Uso de SUM()

Veran ustedes tengo una tabla con registros indexados por un Nº de Transaccion...

algo asi....

nro_trans cuenta fecha valor signo
509609 36100501 2009-01-01 00:00:00.000 2385208561.60 -1
509609 37100501 2009-01-01 00:00:00.000 2385208561.60 1
463860 429581001 2009-01-01 00:00:00.000 .00 1
466857 429581001 2009-01-01 00:00:00.000 .00 -1
460458 429581001 2009-01-01 00:00:00.000 .00 -1
468311 429581001 2009-01-01 00:00:00.000 .04 -1
472600 429581001 2009-01-01 00:00:00.000 1.00 -1
472600 429581001 2009-01-01 00:00:00.000 .00 -1
469689 14100501 2009-01-01 00:00:00.000 1387189522.00 -1
469689 14300501 2009-01-01 00:00:00.000 1387189522.00 1
481932 17050501 2009-01-01 00:00:00.000 365110322.15 1
481932 17050502 2009-01-01 00:00:00.000 63456545.90 -1


Solo para que se hagan una idea, ahora lo que necesito es sacar un historial para ciertas cuentas de forma acumulada a la fecha, no se si es claro lo que quiero pero por ejemplo un SELECT asi es lo que tengo.....

Código:
select sum(valor*signo) Otros_Deudores
from contable_aux 
where fec_doc <='2008-11-30' 
and cuenta like ('13%') and cuenta not in ('13050501','13051001')
Esto me retorna un campo con NOMBRE Otros Deudores en donde sume todo lo de la cuenta 13 y le saque lo de las otras dos cuentas.... teniendo asi un total de los deudores a la Fecha....

Si lo que necesito es esto mismo pero en una sola tabla para varias cuentas como se podria hacer???? que me apareciera algo asi....

Otros deudores Materiales Insumos
VALOR VALOR VALOR VALOR
  #2 (permalink)  
Antiguo 21/04/2009, 09:23
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Uso de SUM()

De donde sacas los valores para materiales insumos ?????
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 21/04/2009, 11:17
 
Fecha de Ingreso: mayo-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Uso de SUM()

Cita:
Iniciado por Dradi7 Ver Mensaje
De donde sacas los valores para materiales insumos ?????
Son otras cuentas, por eso te digo que necesito agrupar la suma de algunas cuentas a cierta fecha....
  #4 (permalink)  
Antiguo 21/04/2009, 11:42
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Uso de SUM()

A ver si esto te alumbra el camino:
Código sql:
Ver original
  1. SELECT SUM(CASE WHEN cuenta='13050502' THEN valor*signo ELSE 0 END) Otros_Deudores,
  2. SUM(CASE WHEN cuenta='13050503' THEN valor*signo ELSE 0 END) Materiales_Insumos
  3. FROM contable_aux
  4. WHERE fec_doc <='2008-11-30'
  5. AND cuenta LIKE ('13%') AND cuenta NOT IN ('13050501','13051001')
Verifica si no necesitas agrupar.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 22/04/2009, 08:32
 
Fecha de Ingreso: mayo-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Uso de SUM()

Bueno he arreglado un poco esto y creo que la mejor forma de presentarselo al usuario es la siguiente, no es atraves de una aplicacion WEB sino un entorno tipo Analizador de Consultas.... y me di cuenta que si hago lo siguiente.....

Código Codigo SQL:
Ver original
  1. select b.nom_cta Concepto, sum(a.imp_mov_mn*a.signo) Valor
  2. from cpf_contaux a, ct_cuentas b
  3. where a.fec_doc <=getdate()
  4. and a.cod_cta in ('14601001')
  5. and a.cod_cta=b.cod_cta
  6. group by b.nom_cta
  7. union
  8. select b.nom_cta, sum(a.imp_mov_mn*a.signo) Valor
  9. from cpf_contaux a, ct_cuentas b
  10. where a.fec_doc <=getdate()
  11. and a.cod_cta in ('14550501')
  12. and a.cod_cta=b.cod_cta
  13. group by b.nom_cta


Con este resultado.... que me parece mejor para mostrar..... pero el problema es cuando trato de meter varias cuentas en una consulta de este tipo


Código SQL:
Ver original
  1. Empaques                                                       #########.##
  2. Materiales y Repuestos                                          ##########.##

Porque necesitaria agrupar los resultados de la siguiente consulta.....

Código SQL:
Ver original
  1. SELECT b.nom_cta,
  2. SUM(a.imp_mov_mn*a.signo) Valor
  3. FROM cpf_contaux a, ct_cuentas b
  4. WHERE a.fec_doc <=getdate()
  5. AND a.cod_cta LIKE ('1305%')
  6. AND a.cod_cta=b.cod_cta
  7. GROUP BY nom_cta

Y que por ejemplo se llamara "CxC Clientes" agrupando y sumando las dos.... tanto nacionales como Exterior.....

Código SQL:
Ver original
  1. Deudores del exterior                                           ##########.##
  2. Deudores nacionales                                             #########.##
  3. FWD Clientes del Exterior                                       #########.##

Última edición por Northware; 22/04/2009 a las 08:49
  #6 (permalink)  
Antiguo 22/04/2009, 08:55
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Uso de SUM()

Asi no te funciona:
Código sql:
Ver original
  1. SELECT b.nom_cta,
  2. SUM(CASE a.cod_cta
  3. WHEN '14601001' THEN a.imp_mov_mn*a.signo
  4. WHEN '14550501' THEN a.imp_mov_mn*a.signo
  5. END) Valor
  6. FROM cpf_contaux a, ct_cuentas b
  7. WHERE a.fec_doc <=getdate()
  8. AND a.cod_cta IN ('14601001','14550501')
  9. AND a.cod_cta=b.cod_cta
  10. GROUP BY b.nom_cta
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 22/04/2009, 09:09
 
Fecha de Ingreso: mayo-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Uso de SUM()

Cita:
Iniciado por flaviovich Ver Mensaje
Asi no te funciona:
Código sql:
Ver original
  1. SELECT b.nom_cta,
  2. SUM(CASE a.cod_cta
  3. WHEN '14601001' THEN a.imp_mov_mn*a.signo
  4. WHEN '14550501' THEN a.imp_mov_mn*a.signo
  5. END) Valor
  6. FROM cpf_contaux a, ct_cuentas b
  7. WHERE a.fec_doc <=getdate()
  8. AND a.cod_cta IN ('14601001','14550501')
  9. AND a.cod_cta=b.cod_cta
  10. GROUP BY b.nom_cta
El del UNION que coloque funcionaba pero debo admitir que tu metodo es mas rapido :D pero y entonces cuando necesito sumar subgrupos de cuentas como en el segundo ejemplo??

Código SQL:
Ver original
  1. SELECT b.nom_cta,
  2. SUM(a.imp_mov_mn*a.signo) Valor
  3. FROM cpf_contaux a, ct_cuentas b
  4. WHERE a.fec_doc <=getdate()
  5. AND a.cod_cta LIKE ('1305%')
  6. AND a.cod_cta=b.cod_cta
  7. GROUP BY nom_cta

Y me retorna los valores para los Deudores Nacionales y Extranejros como agrupo eso en uno solo para hacerle el UNION al Anterior e ir mostrando todo en la misma tabla???......
  #8 (permalink)  
Antiguo 22/04/2009, 11:00
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Uso de SUM()

Has probado asi?
Código sql:
Ver original
  1. SELECT b.nom_cta,
  2. SUM(ca.imp_mov_mn*a.signo) Valor
  3. FROM cpf_contaux a, ct_cuentas b
  4. WHERE a.fec_doc <=getdate()
  5. AND (a.cod_cta LIKE ('1305%') OR a.cod_cta IN ('14601001','14550501'))
  6. AND a.cod_cta=b.cod_cta
  7. GROUP BY b.nom_cta
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #9 (permalink)  
Antiguo 23/04/2009, 09:39
 
Fecha de Ingreso: mayo-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Uso de SUM()

Cita:
Iniciado por flaviovich Ver Mensaje
Has probado asi?
Código sql:
Ver original
  1. SELECT b.nom_cta,
  2. SUM(a.imp_mov_mn*a.signo) Valor
  3. FROM cpf_contaux a, ct_cuentas b
  4. WHERE a.fec_doc <=getdate()
  5. AND (a.cod_cta LIKE ('1305%') OR a.cod_cta IN ('14601001','14550501'))
  6. AND a.cod_cta=b.cod_cta
  7. GROUP BY b.nom_cta
Sip el lio radica en que por ejemplo las cuentas que empiezan por "1305" son 2 y necesitaria mostrarlas con un solo valor ... he intentado esto nuevo pero el lio es cuando necesito por ejemplo unas cuentas a una fecha digamos la cuenta ('14100101', '14100501') a la fecha '2009-01-31' y las anteriores a la fecha del dia en que se haga la consulta, a la larga no importa si sale en filas o columnas sino que pueda traer informacion de:

1. cuentas agrupadas mostrando el nombre de la cuenta o si son varias la posibilidad de ponerle un alias al grupo y obtener la suma del grupo.
2. el valor que se deba obtener debe ser para ciertas cuentas al dia y para otras uno o dos meses atras.
  #10 (permalink)  
Antiguo 27/04/2009, 11:36
 
Fecha de Ingreso: mayo-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Uso de SUM()

Finalmente, luego de combinar lo que me escribiste y algo de lo que yo se logre realizar la consulta como queria, infortunadamente tuve que hacer una serie de UNION para lograr traer datos con fechas diferentes.... pero funciono.

Muy agradecido.
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 20:28.