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

select para informes

Estas en el tema de select para informes en el foro de Bases de Datos General en Foros del Web. buenas, tengo el siguiente problema, estoy realizando un informe de ventas, en el cual obtengo todas las ventas para una fecha especifica, el cual me ...
  #1 (permalink)  
Antiguo 27/07/2009, 22:59
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 16 años, 6 meses
Puntos: 4
select para informes

buenas, tengo el siguiente problema, estoy realizando un informe de ventas, en el cual obtengo todas las ventas para una fecha especifica, el cual me entrega los datos de ella y el total de cada venta. pero ademas quiero que me entregue el total de todas las ventas, lo puedo hacer en una misma consulta? sino como podria hacerlo? aka dejo mi consuulta, gracias de antemano

select v.kn_id_venta, v.d_fecha_venta, v.h_hora_venta, v.n_num_boleta, v.kn_id_mesa, v.x_forma_pago, sum(n_precio*n_cantidad_venta) as total
from detalle_venta as dv inner join ventas as v on dv.kn_id_venta= v.kn_id_venta
where x_estado= 'Cerrado' and (v.d_fecha_venta between '14/07/2009' and '28/07/2009') group by v.kn_id_venta, v.d_fecha_venta, v.h_hora_venta, v.n_num_boleta, v.kn_id_mesa, v.x_forma_pago
ORDER BY kn_id_venta asc



quiero algo que me sume todo los totales de sum(n_precio*n_cantidad_venta) as total

Saludos
  #2 (permalink)  
Antiguo 28/07/2009, 10:33
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: select para informes

Ok pero estas buscando solo el total general al final o es posible que trabajes con rupturas de control(sub-totales)
  #3 (permalink)  
Antiguo 28/07/2009, 12:29
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 meses
Puntos: 360
Respuesta: select para informes

Que base de datos manejas?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 28/07/2009, 14:11
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: select para informes

trabajo con postgres...

me falto solo el total general, se entiende?
  #5 (permalink)  
Antiguo 28/07/2009, 15:06
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 meses
Puntos: 360
Respuesta: select para informes

En oracle y mysql hay 2 excelentes formas de realizar esto mediante cube o rollup. Pero hasta ahora no he encontrado nada de postgres.

sigo buscando.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 28/07/2009, 15:23
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: select para informes

ok ggracias te lo agradeceria mucho ;)
  #7 (permalink)  
Antiguo 28/07/2009, 16:25
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 meses
Puntos: 360
Respuesta: select para informes

Prueba esto

Código sql:
Ver original
  1. SELECT v.kn_id_venta, v.d_fecha_venta, v.h_hora_venta, v.n_num_boleta,
  2. v.kn_id_mesa, v.x_forma_pago, SUM(n_precio*n_cantidad_venta) AS total
  3. FROM detalle_venta AS dv
  4. INNER JOIN
  5. ventas AS v
  6. ON dv.kn_id_venta= v.kn_id_venta
  7. WHERE x_estado= 'Cerrado'
  8. AND (v.d_fecha_venta BETWEEN '14/07/2009' AND '28/07/2009')
  9. GROUP BY v.kn_id_venta, v.d_fecha_venta,
  10.  v.h_hora_venta, v.n_num_boleta, v.kn_id_mesa,
  11. v.x_forma_pago
  12. UNION ALL
  13. SELECT NULL,NULL,NULL,NULL,NULL,NULL,SUM(n_precio*n_cantidad_venta)
  14. FROM detalle_venta AS dv
  15. INNER JOIN
  16. ventas AS v
  17. ON dv.kn_id_venta= v.kn_id_venta
  18. WHERE x_estado= 'Cerrado'
  19. AND (v.d_fecha_venta BETWEEN '14/07/2009' AND '28/07/2009')

asumo que tu consulta funciona bien.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 28/07/2009, 16:33
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: select para informes

gracias huesos, si funciona, pero me queda una duda como hago para obtener el valor de la segunda suma, para poder utilizar, ejemplo


sum(n_precio*n_cantidad_venta) as total_fecha
  #9 (permalink)  
Antiguo 28/07/2009, 16:47
 
Fecha de Ingreso: noviembre-2007
Mensajes: 237
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: select para informes

lo soluciones, agregue una columna null as total_d

sera esa una solucion practica o correcta?

SELECT v.kn_id_venta, v.d_fecha_venta, v.h_hora_venta, v.n_num_boleta, v.kn_id_mesa, v.x_forma_pago,sum(n_precio*n_cantidad_venta) AS total, NULL as total_d
FROM detalle_venta AS dv
INNER JOIN ventas AS v ON dv.kn_id_venta= v.kn_id_venta
WHERE x_estado= 'Cerrado'
AND (v.d_fecha_venta BETWEEN '$fecha1' AND '$fecha2')
GROUP BY v.kn_id_venta, v.d_fecha_venta, v.h_hora_venta, v.n_num_boleta, v.kn_id_mesa, v.x_forma_pago
union ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL, sum(n_precio*n_cantidad_venta) as total_d FROM detalle_venta AS dv
INNER JOIN ventas AS v
ON dv.kn_id_venta= v.kn_id_venta
WHERE x_estado= 'Cerrado' AND (v.d_fecha_venta BETWEEN '$fecha1' AND '$fecha2')
  #10 (permalink)  
Antiguo 28/07/2009, 17:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 meses
Puntos: 360
Respuesta: select para informes

teniendo en cuenta la ausencia de dichas funciones en postgres, me parece una función practica pero poco elegante.

Sin embargo, en rendimiento no se ve muy afectado, ya que la ultima consulta solo retorna un solo valor.

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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 08:54.