SQL - Uso de Having en una consulta

 
Vista:

Uso de Having en una consulta

Publicado por jesusin (2 intervenciones) el 12/07/2007 11:11:14
A ver si alguien me puede ayudar.

Quiero que a traves de una consulta me muestre todos los registros de una base de datos que controla stock de un almacen que esten bajo minimos.
La consulta la tengo hecha pero al usar having, para que funcion tengo que ponerle un número en concreto y yo quiero que me coga ese dato de un campo de la base de datos.
No se si me explico, por si acaso pongo lo que tengo: (no pongo toda la sentencia, solo donde tengo el problema):

"Select..................HAVING SUM(REPUESTOS.[STOCK_INICIAL] + MOV_REPUESTOS.[ALTA] - MOV_REPUESTOS.[BAJA]) < 1"

Si la pongo asi, me muestra todos los registros en los que el stock es menor de 1.
Lo que yo querria es que me cogiera todos los registros en los que el stock sea menor que un stock minimo que establecemos a traves de un campo :

"Select..................HAVING SUM(REPUESTOS.[STOCK_INICIAL] + MOV_REPUESTOS.[ALTA] - MOV_REPUESTOS.[BAJA]) < REPUESTOS.[STOCK_MINIMO]"

Pero si lo pongo así no me funciona, da error. ¿Alguien sabe porque?

Gracias de antemano, espero no haberme liado mucho.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Uso de Having en una consulta

Publicado por lmorilla (11 intervenciones) el 12/07/2007 12:38:48
Si mal no me equivo es por que te falta el sum en la segunda parte de la comparación del having es decir, te quedaría así:

Select..................HAVING SUM(REPUESTOS.[STOCK_INICIAL] + MOV_REPUESTOS.[ALTA] - MOV_REPUESTOS.[BAJA]) < SUM(REPUESTOS.[STOCK_MINIMO])

Por lo que entiendo que no te serviría, ya que te devolvería la suma de stock mínimo, a no ser que este lo dividas por el número de registros, quedando algo así

Select COUNT(*)..................HAVING SUM(REPUESTOS.[STOCK_INICIAL] + MOV_REPUESTOS.[ALTA] - MOV_REPUESTOS.[BAJA]) < (SUM(REPUESTOS.[STOCK_MINIMO)]/(COUNT(*)))

Es un poco chapuza, pero no se me ocurre otra forma
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Uso de Having en una consulta

Publicado por jesusin (2 intervenciones) el 12/07/2007 22:30:44
Muchas gracais por tu respuesta.
De todas formas al final lo he conseguido, el fallo estaba en el campo de la base de datos que era de tipo texto y deberia ser numerico. El sueño no perdona, jejeje

Decirte que lo que hago con esa sentencia es seleccionar los registros de una base de datos que controla un almacen de repuestos, y en concreto con esta quiero que me muestre los que esten bajo minimas existencias.

En concreto la sentencia es esta, un poco larga pero al final funciona perfectamente, ya te digo que el fallo estaba en el tipo de campo:

"SELECT REPUESTOS.[DESIGNACION],REPUESTOS.[CANT_MINIMA] AS MINIMA,REPUESTOS.[STOCK_INICIAL] AS INICIAL, REPUESTOS.[OBJETIVO] AS OBJETIVO,SUM(MOV_REPUESTOS.[ALTA]) AS [ALTAS], SUM (MOV_REPUESTOS.[BAJA]) AS [BAJAS], SUM (REPUESTOS.[STOCK_INICIAL] + MOV_REPUESTOS.[ALTA] - MOV_REPUESTOS.[BAJA]) AS STOCK FROM MOV_REPUESTOS,REPUESTOS WHERE REPUESTOS.[DESIGNACION]=MOV_REPUESTOS.[DESIGNACION] GROUP BY MOV_REPUESTOS.[DESIGNACION], REPUESTOS.[DESIGNACION], REPUESTOS.[CANT_MINIMA], REPUESTOS.[STOCK_INICIAL], REPUESTOS.[OBJETIVO] HAVING SUM(REPUESTOS.[STOCK_INICIAL] + MOV_REPUESTOS.[ALTA] - MOV_REPUESTOS.[BAJA]) < (REPUESTOS.[CANT_MINIMA]) "

Muchas gracias por todo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Uso de Having en una consulta

Publicado por Carlos Curi (1 intervención) el 17/10/2007 16:41:36
Estas comparando en el HAVING a 2 tipos distintos de datos, es decir la funcion SUM() te devuelve un valor numérico definido por el motor de base de datos mientras que el tipo del campo STOCK_MINIMO fue definido por el usuario en el momento de creación de la tabla).
Es por ello que en el sum() < 1 es correcto..
Espero haberte ayudado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar