Visual Basic - Uso de Having en una consulta

Life is soft - evento anual de software empresarial
 
Vista:

Uso de Having en una consulta

Publicado por jesusin (15 intervenciones) el 12/07/2007 00:56:40
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 Matías Freire (421 intervenciones) el 12/07/2007 15:00:57
Porque SUM() te devuelve un solo dato... y Repuestos.[Stock_Minimo] te devuelve más de un dato (uno por cada registro) por lo tanto, SQL no sabe contra cuál comparar el valor del SUM().

Para lo que quieres hacer te recomiendo que no agrupes con el "GROUP BY" y el "HAVING", sino que utilices el COMPUTE.

Saludos!
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 (15 intervenciones) el 12/07/2007 22:27:37
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]) "

Respecto a lo que me comentas de utilizar COMPUTE decirte que no habia oido hablar de ello, ¿podrías explicarme como sería?

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