Access - Consulta para NO mostrar registros que posean cierto campo al menos una vez

 
Vista:

Consulta para NO mostrar registros que posean cierto campo al menos una vez

Publicado por george100 (3 intervenciones) el 28/11/2015 13:40:42
Hola,
Se que es simple para gente que ya sabe mucho de access, pero yo no se tanto y solo estoy practicando consultas, nada que invuelva codigos,

Para expresar lo que necesito saber tengo la siguiente tabla
[COD_SOCIO][DEVUELTO]
1 SI
1 NO
2 SI
2 NO
3 SI
3 SI
4 SI
4 NO

La tabla indica si se devolvieron o no items de acuerdo a su codigo de socio. El socio 1 SI devolvio un item, pero a su vez el socio 1 NO devolvio otro item. El unico que devolvio todos los items es el socio 3,

Quiero hacer una consulta que me muestre solo los socios que devolvieron todos los items, y pensando necesito que NO se listen los numeros de socios cuyo campo posee al menos una vez NO

Y ya llevo 2 dias pensando en como hacerlo y no logro darle la vuelta, desde ya aprecio toda la ayuda posible
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
sin imagen de perfil

Consulta para NO mostrar registros que posean cierto campo al menos una vez

Publicado por Enrique Heliodoro (1664 intervenciones) el 28/11/2015 16:15:19
Yo aplicaría una sencilla lógica, sumaria (agruparía)los códigos de socio y sus elementos relacionados que tengan el valor 'si'.

Si ambas cifras coinciden, el socio en cuestión esta al día, si difieren ... algo tiene prestado.

Es el momento ideal para experimentar con las consultas de agrupación y jugar con las variantes que permiten.
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

Consulta para NO mostrar registros que posean cierto campo al menos una vez

Publicado por george100 (3 intervenciones) el 28/11/2015 17:16:33
Te agradezco muchisimo el haberte tomado el tiempo de responder mi pregunta, sin embargo no puedo llegar a entenderla y pido disculpas por ello.
He agrupado los COD_SOCIO y los elementos de DEVUELTO que tengan el valor "SI". Que me parece que es lo que pense a la primera vez.
Pero al ejecutar la consulta me devuelve la siguiente lista:
COD_SOCIO DEVUELTO
1 SI
2 SI
3 SI
4 SI

Lo cual es logico ya que el socio 1 devolvio al menos un item. Lo que necesito entender es como hacer que la lista quede de la siguiente forma
COD_SOCIO
3

Ya que el socio 3 es el unico que devolvio todos los items

Slds!
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
sin imagen de perfil

Consulta para NO mostrar registros que posean cierto campo al menos una vez

Publicado por Enrique Heliodoro (1664 intervenciones) el 28/11/2015 21:55:21
Voy a suponer que los Si/No son en la practica un campo booleano (que se puede presentar como Si/No, True/False ....) pero sus valores reales son -1 y 0.

Así pues 'la tabla que he recreado' en base a los datos expuestos es la base sobre la que he creado una consulta que expongo en su 'Vista SQL' y que podrás copiar de forma literal en tu aplicación (por cierto, a la tabla la he denominado 'Tabla2').

SELECT Tabla2.Cod_socio, Sum(Tabla2.Devuelto) AS SumaDeDevuelto
FROM Tabla2
GROUP BY Tabla2.Cod_socio;

Si la ejecutas y analizas, apreciaras como puedes obtener ese resultado que deseas.
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

Consulta para NO mostrar registros que posean cierto campo al menos una vez

Publicado por george100 (3 intervenciones) el 29/11/2015 03:36:49
Muchas gracias! He recreado la tabla tambien y funciona tu codigo,
Lamentablemente en la tabla original los valores SI/NO no son booleanos, son de texto nada más, asi que en ese caso tu codigo no funciona.
He intentado cambiar el tipo de dato de la tabla pero me elimina los valores, incluso al importarla nuevamente y cambiarla durante la importacion.

Agradezco mucho tu ayuda, sigo buscando como se debe hacer, he tenido un par de ideas despues de descansar mi mente

Slds!
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
sin imagen de perfil

Consulta para NO mostrar registros que posean cierto campo al menos una vez

Publicado por Enrique Heliodoro (1664 intervenciones) el 29/11/2015 12:34:54
Curioso diseño que en lugar de facilitar, complica las cosas (un campo de texto puede contener cuando menos dos formas de escribir el acierto, un 'Si' y un 'Sí' que para Access no son iguales) .... y aquí se pierde la veracidad de la información (al existir dos interpretaciones) para un mismo supuesto.

Pero cada uno en su casa es quien impone las normas.

Como al (supuesto) 'NO', no se le suele adjudicar acento (una sola posibilidad, porque Access no distingue entre mayúsculas y minúsculas a no ser que se le imponga de forma especifica) se podría utilizar para crear una expresión Booleana:
.- se considerara un 'si' a todo aquello que sea diferente de un 'no'

Ello nos permitirá interpretar 'cualquier forma de expresar un acierto en modo texto'

Antes:
.... Sum(Tabla2.Devuelto) AS SumaDeDevuelto ......

Después y tras crear un nuevo campo en la tabla de muestra (Devuelto2) que ofrece el mismo dato, pero en formato texto,

....... Sum(Tabla2.Devuelto2 <> "no") AS SumaDeDevuelto .......


Como anécdota, lo de 'SumaDeDevuelto' lo aplica Access por defecto, pero se puede modificar para que se adapte a nuestros gusto, por ejemplo asi:
....... Sum(Tabla2.Devuelto2 <> "no") AS Aceptados ....... ....... Sum(Tabla2.Devuelto2 <> "no") AS No_Deudores .......

Con esa consulta (y en modo diseño), se le puede imponer una condición, por ejemplo una que devuelva el resultado antes mostrado.

SELECT Tabla2.Cod_socio, Sum([Tabla2].[Devuelto2]<>"no") AS SumaDeDevuelto
FROM Tabla2
GROUP BY Tabla2.Cod_socio
HAVING (((Sum([Tabla2].[Devuelto2]<>"no"))=0));


Y puede devolver solo el dato de interés (el numero de socio), que lo que implica 'salir en la lista' es igual para todos los seleccionados:

SELECT Tabla2.Cod_socio
FROM Tabla2
GROUP BY Tabla2.Cod_socio
HAVING (((Sum([Tabla2].[Devuelto2]<>"no"))=0));


Creo que dedicarle un poco de tiempo a las consultas reportara inmensos beneficios (y esto no deja de serla muestra de una gota de ese inmenso océano en el cual apenas chapoteo)
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