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

[SOLUCIONADO] Consulta con Condicionales entre tipo de Datos Float

Estas en el tema de Consulta con Condicionales entre tipo de Datos Float en el foro de SQL Server en Foros del Web. Buen dia chicos! una vez mas por aqui necesitando de su ayuda. Resulta que, necesito hacer una vista en en mi BD de SQL, donde ...
  #1 (permalink)  
Antiguo 24/02/2014, 08:56
Avatar de Yoss15  
Fecha de Ingreso: octubre-2007
Mensajes: 11
Antigüedad: 16 años, 6 meses
Puntos: 0
Pregunta Consulta con Condicionales entre tipo de Datos Float

Buen dia chicos! una vez mas por aqui necesitando de su ayuda.

Resulta que, necesito hacer una vista en en mi BD de SQL, donde me excluya aquellas filas que contengan valor cero en 2 de sus campos, aca un ejemplo visualizarlo mejor..

la tabla es algo como esto:

ncuenta montopres montogasto
001 15.00000 14.00000
002 0.00000 12.00000
003 0.00000 0.00000
004 26.00000 14.00000
005 0.00000 0.00000

Pero cuando aplico el select
where (montopres<>0 and montogasto<>0)

el resultado deberia ser:

ncuenta montopres montogasto
001 15.00000 14.00000
002 0.00000 12.00000
004 26.00000 14.00000

y resulta me hace filtro pero toma tambien aquellas filas cuando uno de sus campos es cero, ya que los campos montopres y montogasto por ser tipo de dato FLoat, al hacer el select los resultados no son los correctos.

Alguna sugerencia para poder filtar en mi vista aquellas filas cuando ambos valores sean cero???
  #2 (permalink)  
Antiguo 24/02/2014, 09:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta con Condicionales entre tipo de Datos Float

Si lo que quieres es que no devuelva las filas si al menos uno de los valores es cero, es simplemente OR:
Código SQL:
Ver original
  1. WHERE (montopres<>0 OR montogasto<>0)
__________________
¿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 24/02/2014, 09:10
Avatar de Yoss15  
Fecha de Ingreso: octubre-2007
Mensajes: 11
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta con Condicionales entre tipo de Datos Float

Hola gnzsoloyo, gracias por responder.

No, precisamente es al contrario:

No quiero que devuelva las filas cuando ambos valores sean cero. Por eso aplique el AND..

Pero por ser tipo de dato FLoat la consulta no devuelve los resultados correctamente, me toma tambien cuando alguno de los valores es cero en algunos casos
  #4 (permalink)  
Antiguo 24/02/2014, 09:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta con Condicionales entre tipo de Datos Float

¿Probaste la consulta?
__________________
¿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 24/02/2014, 09:27
Avatar de Yoss15  
Fecha de Ingreso: octubre-2007
Mensajes: 11
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta con Condicionales entre tipo de Datos Float

Si, he hecho las pruebas y he comprobado que no me trae los resultados correctos.
  #6 (permalink)  
Antiguo 24/02/2014, 09:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta con Condicionales entre tipo de Datos Float

Bueno, según lo que dices, tienes esto:
Cita:
ncuenta montopres montogasto
001 15.00000 14.00000
002 0.00000 12.00000
003 0.00000 0.00000
004 26.00000 14.00000
005 0.00000 0.00000
y quieres esto:

Cita:
ncuenta montopres montogasto
001 15.00000 14.00000
002 0.00000 12.00000
004 26.00000 14.00000
Esta consulta:
Código SQL:
Ver original
  1. SELECT ...
  2. FROM tabla
  3. WHERE NOT (montopres = 0 OR montogasto = 0)
debería ser suficiente, aunque esta otra
Código SQL:
Ver original
  1. SELECT ...
  2. FROM tabla
  3. WHERE (montopres <> 0 OR montogasto <> 0)
debería dar el mismo resultado, porque sólo excluirá aquel caso donde ambos fuesen cero.

Postea el resultado que obtienes cuando ejecutas la primera que te propuse...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 24/02/2014, 09:46
Avatar de Yoss15  
Fecha de Ingreso: octubre-2007
Mensajes: 11
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta con Condicionales entre tipo de Datos Float

Me da el exactamente el mismo resultado que cuando aplicaba mi select inicial, me excluye aquellas filas cuando ambos son ceros, pero ademas aquellas que en alguno de los casos es cero.

Es decir me arroja los siguiente:

ncuenta montopres montogasto
001 15.00000 14.00000
004 26.00000 14.00000

Y necesito que se muestren tambien aquellas donde uno de sus valores sea cero .

=(

Pero estuve leyendo y tiene que ver con el tipo de dato que es FLoat, aparentemente cuando se aplica un condicional a ese tipo de dato la consulta podria no arrojar los resultados correctos..

Aqui el link donde lei sobre eso,.



Utilizar datos float y real




Los tipos de datos float y real se conocen como tipos de datos aproximados. El comportamiento de float y real sigue la especificación IEEE 754 acerca de los tipos de datos numéricos aproximados.

Los tipos de datos numéricos aproximados no almacenan los valores exactos especificados para muchos números; almacenan una aproximación muy precisa del valor. Para muchas aplicaciones, la pequeña diferencia entre el valor especificado y la aproximación almacenada no es apreciable. Sin embargo, a veces la diferencia se hace notar. Debido a la naturaleza aproximada de los tipos de datos float y real, no los use cuando necesite un comportamiento numérico exacto, como, por ejemplo, en aplicaciones financieras, en operaciones que conlleven un redondeo o en comprobaciones de igualdad. En su lugar, use los tipos de datos enteros, decimal, money o smallmoney.

Evite usar columnas float o real en las condiciones de búsqueda de la cláusula WHERE, especialmente los operadores = y <>. Es aconsejable limitar las columnas float y real a las comparaciones > o <.


La especificación IEEE 754 proporciona cuatro modos de redondeo: redondear al más cercano, redondear hacia arriba, redondear hacia abajo y redondear a cero. Microsoft SQL Server utiliza el redondeo hacia arriba. Todos son precisos para garantizar la exactitud, aunque pueden dar como resultado valores en punto flotante ligeramente distintos. Puesto que la representación binaria de un número en punto flotante puede usar cualquiera de los esquemas válidos de redondeo, no se puede cuantificar de forma precisa un valor en punto flotante.

SAcado de :
http://technet.microsoft.com/es-es/library/ms187912%28v=sql.105%29.aspx


Pero pienso que debe existir una manera de poder hacer este filtro sin alterar la naturaleza de la tabla de la BD.
  #8 (permalink)  
Antiguo 24/02/2014, 09:51
Avatar de Yoss15  
Fecha de Ingreso: octubre-2007
Mensajes: 11
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Consulta con Condicionales entre tipo de Datos Float

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, según lo que dices, tienes esto:

y quieres esto:



Esta consulta:
Código SQL:
Ver original
  1. SELECT ...
  2. FROM tabla
  3. WHERE NOT (montopres = 0 OR montogasto = 0)
debería ser suficiente, aunque esta otra
Código SQL:
Ver original
  1. SELECT ...
  2. FROM tabla
  3. WHERE (montopres <> 0 OR montogasto <> 0)
debería dar el mismo resultado, porque sólo excluirá aquel caso donde ambos fuesen cero.

Postea el resultado que obtienes cuando ejecutas la primera que te propuse...


Oye, acabo de ejecutar tu consulta pero cambiando el OR por AND y aparentemente si esta resultando..

SELECT ...
FROM tabla
WHERE NOT (montopres = 0 AND montogasto = 0)

Solo que debo comprobarlo, porque la tabla tiene miles de registros..

Voy a revisar detenidamente y te notifico en cuanto esté segura,

Muchas gracias
  #9 (permalink)  
Antiguo 24/02/2014, 10:27
Avatar de Yoss15  
Fecha de Ingreso: octubre-2007
Mensajes: 11
Antigüedad: 16 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Consulta con Condicionales entre tipo de Datos Float

Muchas gracias gnzsoloyo!!

Me ha funcionado con el
where not (montopres = 0 and montogasto = 0 )

Era mas simple de lo que imaginaba!!

Muchisimas gracias!!

Etiquetas: campo, condicionales, float, select, sql, tabla, tipo
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 00:52.