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

No he podido construir este query

Estas en el tema de No he podido construir este query en el foro de PostgreSQL en Foros del Web. Buenas a tod@s, He tratado de construir un query de esta forma: SELECT Id, SUM(Ventas) AS Total FROM tabla1 WHERE Total <= 3000 GROUP BY ...
  #1 (permalink)  
Antiguo 07/03/2013, 15:26
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 9 meses
Puntos: 8
No he podido construir este query

Buenas a tod@s,

He tratado de construir un query de esta forma:

SELECT Id, SUM(Ventas) AS Total FROM tabla1 WHERE Total <= 3000 GROUP BY Id

Obviamente sale error ya que la columna Total no existe en la tabla1 y ese es el cuello de botella que no he podido pasar....

La idea es generar un reporte que refleje por cada Id el total de ventas y que ese total de ventas no exceda el valor de 3000

Acudo a ustedes con el fin de obtener alguna ayuda

Mil Gracias de antemano
__________________
El que no sabe y sabe que no sabe, es un ignorante...enseñémosle!. El que no sabe y se cree que sabe, es un necio... ¡ignorémosle!.
El que sabe y sabe que sabe, es un sabio... ¡sigámosle!.
  #2 (permalink)  
Antiguo 07/03/2013, 15:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 1 mes
Puntos: 360
Respuesta: No he podido construir este query

Prueba esto:

Código SQL:
Ver original
  1. SELECT Id, SUM(Ventas) AS Total FROM tabla1 GROUP BY Id HAVING SUM(Ventas) <=3000
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 08/03/2013, 07:25
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 9 meses
Puntos: 8
Respuesta: No he podido construir este query

Gracias huesos52 por su ayuda.... en principio me canciona bien pero se me complica cuando combino dos querys.

En un tema anterior vi un query que trata practicamente de lo mismo y acomodandolo a mi necesidad lo tengo asi:

SELECT SUM(total)
FROM
( SELECT SUM(valor) AS total
FROM tabla1 WHERE id = '1234' AND item = '1000'
UNION
SELECT SUM(valor) AS total
FROM tabla2 WHERE id='1234' AND item IN ('1100','1200','1599') AND fecha BETWEEN '2012-04-01' AND '2012-04-30'
) AS xx

Lo que trato de hacer es que el resultado del primer SELECT sumado al resultado del segundo no sea mayor a 3000

En ese orden de ideas el resultado que obtengo con este query es la suma de los dos resultados pero no logro hacer que valide que el resultado no sea mayor que 3000

Mi hice entender?

De nuevo, de antemano mil gracias por su ayuda
__________________
El que no sabe y sabe que no sabe, es un ignorante...enseñémosle!. El que no sabe y se cree que sabe, es un necio... ¡ignorémosle!.
El que sabe y sabe que sabe, es un sabio... ¡sigámosle!.
  #4 (permalink)  
Antiguo 08/03/2013, 11:47
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 9 meses
Puntos: 8
Respuesta: No he podido construir este query

Listo, casi solucionada la vaina...

SELECT SUM(total)
FROM
( SELECT SUM(valor) AS total
FROM tabla1 WHERE id = '1234' AND item = '1000'
UNION
SELECT SUM(ventas) AS total
FROM tabla2 WHERE id='1234' AND item IN ('1100','1200','1599') AND fecha BETWEEN '2012-04-01' AND '2012-04-30'
) AS xx
HAVING SUM(total) <=(SELECT base*2 FROM tabla3)


Con este devuelve el resultado siempre y cuando no sea mayor que SELECT base*2 FROM tabla3 (o 3000 que es el limite en mi ejemplo), pero si el resultado es mayor el query devuelve NULL....

Ahora, cómo le hago para que cuando el resultado es NULL me devuelva 0 (cero)? debe ser usando el CASE (pienso yo,....) pero hasta ahí no le llego.....
__________________
El que no sabe y sabe que no sabe, es un ignorante...enseñémosle!. El que no sabe y se cree que sabe, es un necio... ¡ignorémosle!.
El que sabe y sabe que sabe, es un sabio... ¡sigámosle!.

Etiquetas: as, construir, group, query, tabla, valor
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 09:24.