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

columnas acumulables

Estas en el tema de columnas acumulables en el foro de Bases de Datos General en Foros del Web. Hola buen dia. Una pregunta estoy realizando un balance general obteniendo las ventas y las compras del dia y el resultados sera el saldo inicial ...
  #1 (permalink)  
Antiguo 27/08/2015, 11:32
Avatar de richie_  
Fecha de Ingreso: agosto-2015
Ubicación: Puebla
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Busqueda columnas acumulables

Hola buen dia. Una pregunta estoy realizando un balance general obteniendo las ventas y las compras del dia y el resultados sera el saldo inicial del siguiente dia. La pregunta seria como hacer acumulable la tabla de saldo final ya que en la base de datos solo tengo ventas y compras. Estoy realizando la consulta consulta con with para serla recursiva y muestre el dia a dia de las ventas y compras, ocupando la instruccion lag para obtener el registro del dia anterior pero no es acumulable. La falla que tengo es la siguiente

Fecha saldo_inicial compras total_ventas saldo_final
2015-06-30 0,00 0,00 0,00 0,00
2015-07-01 0,00 2000,00 0,00 2000,00
2015-07-02 2000,00 2000,00 0,00 4000,00
2015-07-03 2000,00 500,00 0,00 2500,00
2015-07-04 500,00 0,00 0,00 500,00
2015-07-05 0,00 0,00 0,00 0,00



Por logica el saldo final del dia 2015/07/03 seria de 4500 y solo esta sumando el dia anterior + la compra del dia
El gestor es sql server 2012


Me podrian ayudar
Gracias

Última edición por richie_; 27/08/2015 a las 11:39
  #2 (permalink)  
Antiguo 27/08/2015, 11:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: columnas acumulables

Pregunta básica: ¿Qué DBMS estás usando?
No lo veo mencionado en ninguna parte, y los recursos para hacer reportes de este tipo son diferentes en cada caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/08/2015, 11:55
Avatar de richie_  
Fecha de Ingreso: agosto-2015
Ubicación: Puebla
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: columnas acumulables

Es sql Server Management Studio 2012
  #4 (permalink)  
Antiguo 27/08/2015, 12:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: columnas acumulables

¿Revisaste este tema?:
Utilizar GROUP BY con ROLLUP, CUBE y GROUPING SETS

Ese sería el caso que debes usar para generar reportes como los que buscas.

Postea la query usada (no programación, por favor, sólo SQL).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/08/2015, 12:21
Avatar de richie_  
Fecha de Ingreso: agosto-2015
Ubicación: Puebla
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: columnas acumulables

la query seria esta :

Código SQL:
Ver original
  1. GO
  2. WITH fechas
  3.     AS
  4.     (
  5.         SELECT CAST ('20150601' AS DATE) AS Fecha
  6.         UNION ALL
  7.         SELECT DATEADD (D, 1, FECHA) AS FECHA
  8.         FROM FECHAS WHERE FECHA < CAST ('20150831' AS DATE)
  9.     )  
  10.     SELECT f.Fecha,
  11.      LAG((isnull(depositos.suma_dinero,0) - isnull(sales.total_de_montos,0)),1,0) OVER (ORDER BY f.Fecha) AS saldo_inicial,
  12.         ISNULL (depositos.suma_dinero,0) AS compras,
  13.         ISNULL(sales.total_de_montos, 0) AS total_ventas,
  14.         (LAG((isnull(depositos.suma_dinero,0) - isnull(sales.total_de_montos,0)),1,0) OVER (ORDER BY f.Fecha)+(isnull(depositos.suma_dinero,0) - isnull(sales.total_de_montos,0)) ) AS saldo_final
  15.  
  16. FROM fechas f
  17.     LEFT JOIN (
  18.                               SELECT SUM(t.monto) AS total_de_montos,
  19.                     COUNT(t.monto) AS numero_montos ,
  20.                     CONVERT(DATE,t.fecha_ingreso) AS fecha_ingreso             
  21.                 FROM ventas t
  22.                 WHERE (t.fecha_ingreso <=(SELECT DATEADD(ms,-3,DATEADD(dd,DATEDIFF(dd,0,GETDATE()),1))) AND t.fecha_ingreso >= (SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))) AND t.id_usuario = 29
  23.                 GROUP BY CONVERT(DATE,t.fecha_ingreso)     
  24.             ) sales
  25.     ON sales.fecha_ingreso = f.Fecha
  26.     LEFT JOIN (
  27.                 SELECT COUNT (dh.monto) AS dinero_depositado,
  28.                         SUM (dh.monto) AS suma_dinero,
  29.                         dh.fecha_deposito
  30.                 FROM usuario u
  31.                 INNER JOIN depositos_historicos dh
  32.                 ON u.usuario_id = dh.id_usuario
  33.                 WHERE u.usuario_id = 29 AND dh.id_estatus = 3
  34.                 GROUP BY dh.fecha_deposito
  35.             ) depositos
  36.     ON depositos.fecha_deposito = f.Fecha
  37.    
  38. ORDER BY f.Fecha ASC
  39. OPTION(maxrecursion 0)
  40.  
  41. GO

Última edición por richie_; 27/08/2015 a las 12:28
  #6 (permalink)  
Antiguo 27/08/2015, 13:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: columnas acumulables

parece ser que tu "recursividad" no esta trabajando bien, pon un ejemplo de tus datos para poder ayudarte ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 27/08/2015, 14:35
Avatar de richie_  
Fecha de Ingreso: agosto-2015
Ubicación: Puebla
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: columnas acumulables

Cita:
Iniciado por Libras Ver Mensaje
parece ser que tu "recursividad" no esta trabajando bien, pon un ejemplo de tus datos para poder ayudarte ;)
Código SQL:
Ver original
  1. Fecha      saldo_inicial_1       compras               total_ventas          saldo_final
  2. ---------- --------------------- --------------------- --------------------- ---------------------
  3. 2015-07-01 0,00                  2000,00               0,00                  2000,00
  4. 2015-07-02 2000,00               2000,00               0,00                  4000,00
  5. 2015-07-03 2000,00               500,00                0,00                  2500,00
  6. 2015-07-04 500,00                0,00                  0,00                  500,00
  7. 2015-07-05 0,00                  0,00                  0,00                  0,00
  8. 2015-07-06 0,00                  0,00                  0,00                  0,00
  #8 (permalink)  
Antiguo 27/08/2015, 15:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: columnas acumulables

y necesitas que quede????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 27/08/2015, 15:10
Avatar de richie_  
Fecha de Ingreso: agosto-2015
Ubicación: Puebla
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: columnas acumulables

la falla es que en la tercera columna el registro de la fecha 2015-07-03, debe de ser acumulado con 4500 y no con 2500 como lo muestra.

Creo tener la respuesta: y es una variable en la recursividad, para que se pueda acumular el ultimo saldo final. pero todavia no la plasmo bien no se si me entienda !!!!

Fecha saldo_inicial_1 compras total_ventas saldo_final
---------- --------------------- --------------------- --------------------- ---------------------
2015-07-01 0,00 2000,00 0,00 2000,00
2015-07-02 2000,00 2000,00 0,00 4000,00
2015-07-03 2000,00 500,00 0,00 2500,00
2015-07-04 500,00 0,00 0,00 500,00
2015-07-05 0,00 0,00 0,00 0,00
  #10 (permalink)  
Antiguo 27/08/2015, 15:13
Avatar de richie_  
Fecha de Ingreso: agosto-2015
Ubicación: Puebla
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: columnas acumulables

Cita:
Iniciado por richie_ Ver Mensaje
la falla es que en la tercera columna el registro de la fecha 2015-07-03, debe de ser acumulado con 4500 y no con 2500 como lo muestra.

Creo tener la respuesta: y es una variable en la recursividad, para que se pueda acumular el ultimo saldo final. pero todavia no la plasmo bien no se si me entienda !!!!

Código SQL:
Ver original
  1. Fecha      saldo_inicial_1       compras               total_ventas          saldo_final
  2. ---------- --------------------- --------------------- --------------------- ---------------------
  3. 2015-07-01 0,00                  2000,00               0,00                  2000,00
  4. 2015-07-02 2000,00               2000,00               0,00                  4000,00
  5. 2015-07-03 2000,00               500,00                0,00                  2500,00
  6. 2015-07-04 500,00                0,00                  0,00                  500,00
  7. 2015-07-05 0,00                  0,00                  0,00                  0,00
Asi tiene que mostrarse
Código SQL:
Ver original
  1. Fecha      saldo_inicial_1       compras               total_ventas          saldo_final
  2. ---------- --------------------- --------------------- --------------------- ---------------------
  3. 2015-07-01 0,00                  2000,00                0,00                  2000,00
  4. 2015-07-02 2000,00               2000,00                0,00                  4000,00
  5. 2015-07-03 4000,00                500,00                0,00                  4500,00
  6. 2015-07-04 4500,00                0,00                  0,00                  4500,00
  7. 2015-07-05 4500,00                0,00                  0,00                  4500,00

Etiquetas: acumular
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 02:10.