Ver Mensaje Individual
  #7 (permalink)  
Antiguo 06/07/2018, 06:25
Avatar de gnzsoloyo
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: a ver quien me ayudaen esta cruzada

Ok... Revisando los dos posts de este hilo, me parece que lo que te está sucediendo es que no tienes una completa comprensión de cómo funciona el SQL, y lo que hace el WHERE en especial...

Lo que quieres resolver es esto:
Cita:
tengo una tabla en la que los campos tienen valores y los que no tiene valores tiene cero(0), yo lo que necesito es seleccionar todos los registros ,que, en cuyos campos no haya cero
Ahora bien, el ejemplo de datos que nos das es este:
Cita:
nr=3194
single=235
iva=si
doble=0
triple=0
cuadr=458
dpto2p=0
dpto3p=555
Y quieres que en base a eso, puedas obtener esto:
Cita:
nr =3194
single=235
iva=si
cuadr=458
dpto3p=555
Bueno, eso que dices querer como resultado en una query que apunta una única tabla con múltiples campos, es absolutamente imposible a nivel SQL y sólo lo puedes hacer programáticamente, por las siguientes razones:
1) Un SELECT devuelve siempre la cantidad de campos que indica a continuación, sean estos TODOS los de la(s) tabla(s) del FROM, o solo los que se indiquen, como se indiquen. NO PUEDE devolver una cantidad menor a la definida, ni descarta dinámicamente ninguno de ellos.
2) El WHERE evalúa cada uno de los registros como una unidad lógica. Esto significa que deben cumplirse TODAS las condiciones para que el registro sea devuelto en la consulta. Como es una sola unidad lógica, si al menos UNO de los campos no cumple la condición, se descarta el registro entero.

Interpretando los datos de tu ejemplo en base a esto, el problema es que ese registro con NR = 3194 tiene los campos "doble" y "triple" en cero y por consecuencia NUNCA devolverá ese registro.

¿Se entiende el problema?

Ahora, esto tendría una solución, pero no es una solución por una query simple, y hay dos formas de resolverlo.
Una, las habitaciones que aparecen en esa tabla deberían estar en otra tabla, la cual tendría un registro por cada una de ellas. Esa tabla requiere ademas otra tabla adicional de tipos de habitaciones... es otro diseño.
Otra forma es hacer una query multiple con UNION ALL, donde cada SELECT consulte por UNA de las habitaciones. El problema es que una consulta así es de difícil mantenimiento y lectura. No es muy aconsejable.

TODO el resto de la solución es programática, no de SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)