Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Bases de Datos General (http://www.forosdelweb.com/f21/)
-   -   sentencia acumulativa (http://www.forosdelweb.com/f21/sentencia-acumulativa-369303/)

jeffcar 07/02/2006 10:04

sentencia acumulativa
 
hola amigos trabajo en sql server y tengo la siguiente tarea que no he podido resolver:

tengo la siguiente tabla auxiliar(fecha,debe,habe,auxiliar)
fecha | debe | habe | auxiliar
A | 240 | 0 | 1
B | 100 | 0 | 1
C | 60 | 140 | 1

ahora lo que necesito hacer es presentar la informacion acumulada, me explico para el ejmplo con el campo (debe)
el primer registro con 240, el segundo con la suma del primero:340 el tercero con la siguiente suma :400
=240
(240+100)=340
(340+60)=400
necesito estos resultados

Debe | auxiliar | fecha
240 | 1 | A
340 | 1 | B
400 | 1 | C



espero haber sido claro y la verdad necesito es que me guien un poco para saber por donde pueda ser

no necesito modificar sino simplemente presentar, esto es para un informe
de ante mano gracias por sus posibles aportes.

Jose_minglein2 08/02/2006 06:14

Código:

select auxiliar, fecha, (select sum(debe) from tabla where id<=T.id) as acumulado from tabla T
Eso suponiendo que el acumulado va ordenado por el id,

jeffcar 08/02/2006 15:13

Estupendo muchas gracias la verdad yo lo estaba trabajando por otros lados que me ponian mas complique, es una instrucion sencilla y funciona muy bien

jeffcar 08/02/2006 15:52

tengo otra inquietud ojala puedas ayudar a resolverla , si quisiera poner una condicion, suponiendo que tengo otro campo llamado 'opcion' y que si opcion es 1 que me presente la sumatoria al debe y que si fuera 2 me presente la sumatoria al habe, es esto posible
----------------------------------
|fecha|auxiliar|debe|habe|opcion|
----------------------------------
| a | 1 | 240 | 0 | 1 |
| b | 1 | 100 | 0 | 1 |
| c | 1 | 0 | 140 | 1 |
| d | 2 | 0 |360 | 2 |
| e | 2 | 0 |190 | 2 |
| f | 2 | 250 | 0 | 2 |

Resultados
----------------------------------
|fecha|auxiliar|acumulado|opcion|
----------------------------------
| a | 1 | 240 | 1 |
| b | 1 | 340 | 1 |
| c | 1 | 340 | 1 |
| d | 2 | 360 | 2 |
| e | 2 | 550 | 2 |
| f | 2 | 550 | 2 |

aqui los acumulados van por auxiliar, y para auxiliar '1' tiene opcion '1' y los acumulados son del debe,y para el auxiliar 2 tiene opcion '2' entonces en acumulados coloco los del habe.

nose si exista una especie de IIF(opcion==1,sumatoriaDebe,Sumatoriahabe) as acumulado

espero que este claro el post, de ante mano gracias ya me has ayudado bastante, igual por mi cuenta voy a investigar si puedo resolverlo yo antes

Jose_minglein2 09/02/2006 01:56

Eso suele pasar intentas buscar la solución en una dirección y te ofuscas y te complicas la vida. Lo mejor, borrar el chip y volver a plantear el problema.
Código:

select auxiliar, fecha,
if(opcion=1,
(select sum(debe) from tabla where id<=T.id),
(select sum(haber)
from tabla where id<=T.id)) as acumulado
from tabla T

Asi sería en Mysql, en SQL server, la instrucción if es de otra manera (iIF o algo así), mira la sintaxis exacta, pero la idea es esa. Es que yo uso mysql y la sintaxis de SQLServer ni idea.

jeffcar 09/02/2006 08:15

Bueno para sql quedaria algo asi, ya lo probe y me funciona muy bien

select auxiliar, fecha,
(case opcion when '1' then (select sum(debe) from tabla where id<=T.id)
else (select sum(haber) from tabla where id<=T.id) end) as acumulado
from tabla T


bueno muchas gracias por tu ayuda y por la prontitud a tus respuestas
Muy seguramente este tema le sera de gran utilidad a otras personas.


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.