Mostrar sólo registros que cumplan tres condiciones en un mismo campo (registros duplicados)

He estado buceando sin descanso en el foro y aunque hay muchas respuestas relacionadas, no consigo encontrar la solución a mi problema.

Tengo una tabla de este estilo:

SECTOR // PERSONA // ALTA // FECHA ALTA //

Sector 1 // Pepe // Sí // 00/00/0000

Sector 2 // Pepe // Sí // 00/00/0000

Sector 3 // Pepe // Sí // 00/00/0000

Sector 1 // María // Sí // 00/00/0000
Sector 2 // María // No // 00/00/0000
Sector 3 // María // No // 00/00/0000

...

Tengo 40 sectores diferentes y 10 personas diferentes y la tabla registra cada sector por cada persona y si está o no dada de alta en ese sector, es decir en total tengo 400 registros. Lo que yo quiero es poder extraer sólo aquellos registros que cumplan estar dados de alta a la vez en tres sectores diferentes.

Tengo una consulta basada en esta tabla que me extrae los registros en los que el campo ALTA es Verdadero.

Tengo un formulario con tres combobox y un botón, los tres combobox dan la opción de elegir tres sectores diferentes y el botón lee esos datos y filtra la consulta anterior a través de este código:

Private Sub Botón_Click()
On Error GoTo Botón_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "Ejemplo"
stLinkCriteria = "[SECTOR]='" & Me![Desplegable 7] & "' Or [SECTOR] ='" & Me![Desplegable 8] & "' Or [SECTOR] ='" & Me![Desplegable 9] & "'"
DoCmd.OpenForm stDocName, acFormPivotTable, , stLinkCriteria
Exit_Botón_Click:
Exit Sub
Err_Botón_Click:
MsgBox Err.Description
Resume Exit_Botón_Click
End Sub

Tal y como lo tengo ahora y en el ejemplo que os he puesto si yo busco a la persona que está dada de alta en los Sectores 1, 2 y 3 me devuelve el resultado de Pepe y el de María, pero lo que necesito es que me devuelva sólo el resultado de Pepe que es el único que está dado de alta en los tres sectores a la vez.

Espero haberme explicado bien, no obstante, estaré pendiente por si puedo aclarar alguna duda.

1 Respuesta

Respuesta
1

La consulta para saber las personas que están de alta en 3 o más sectores la puedes plantear como:

select persona
from mitabla
where alta = 'Sí'
group by persona
having count(*) >= 3

Si después quieres recuperar la información de esas personas:

select * from mitabla where persona in (

select persona
from mitabla
where alta = 'Sí'
group by persona
having count(*) >= 3

)

Y si sólo quieres recuperar la información de esas personas en los sectores en los que están de alta, lógicamente:

select * from mitabla where persona in (
select persona
from mitabla
where alta = 'Sí'
group by persona
having count(*) >= 3
) and alta = 'Sí'

Vaya, gracias por la rapidez. :)

La solución que me propones es una de las que estuve intentando y que no conseguí hacer funcionar, vaya por delante que de access se lo justito y todo lo que he puesto ha sido gracias a muchas de las cosas que he ido sacando del foro y modificando más mal que bien... (me llevo mejor con el excel, qué le vamos a hacer)

Creo que no conseguí que funcionara porque en realidad como máximo está la opción de los tres sectores, pero en realidad me gustaría que funcionara tanto si busco por un sólo sector como si busco por 2 sectores o como máximo 3.

De todas formas, me guardo tu respuesta para otra consulta con la que me estaba pegando, así que, lo dicho, muchas gracias!

Puedes jugar con la condición del count para fijar lis sectores que desees.

Es una opción que no descarto en caso de no encontrar otra alternativa, lo que pasa es que esta herramienta no es para mi uso, sino para otros compañeros, así que en principio estoy intentando hacerla lo más sencilla posible.

Si finalmente me rindo, también había pensado dar tres alternativas al usuario, para buscar un sólo sector, para buscar 2 y para buscar 3.... pero será como último recurso.

Si puedes, cierra la pregunta, por favor.

Así desaparecerá de mi lista de preguntas activas y me resultará más fácil gestionar las que tengo en curso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas