Calcular moda en access

Tengo un problema trabajo con excel pero me pidieron hacer una consulta en access y lo que me pidan es por ejemplo tengo una base de todos parecida a esta
campo1 campo2 campo3 campo4
1 2 3 A
1 2 3 B
1 2 3 A
3 1 2 A
3 1 2 C
3 1 2 C
Donde tengo que juntar mi campo 1,2,3 para crear un registro único( en eso no hay problema) pero lo que ya no pude es sacar elvalor que más se repita de mi campo4 y todo tiene que estar agrupodo con forme a mi registro único de tal forma que se tiene que ver algo así
campo1 campo2 campo3 campo4
1 2 3 A
3                  1            2                 C            
me trabe al sacar la moda de mi campo 4 pues todo tiene que estar agrupado
les agradesco su ayuda desde ya
esto es lo que llevo de codigo
SELECT TOP 1 Campo4
FROM [SELECT DISTINCT Campo4, COUNT(Campo4) FROM   tabla                             GROUP BY campo4 ORDER BY COUNT(campo4) DEsc]
Esto me saca el valor que más repite pero no se como calcularlo con respecto a mis datos que agrupo...

2 Respuestas

Respuesta
1
Yo haría primero una consulta así:
SELECT Tabla1.Campo1, Tabla1.Campo2, Tabla1.Campo3, Tabla1.Campo4, DCount("Campo4","tabla1","Campo1=" & [Campo1] & " AND Campo2=" & [Campo2] & " AND Campo3=" & [Campo3] & " AND Campo4='" & [Campo4] & "'") AS ContarCampo4
FROM Tabla1
GROUP BY Tabla1.Campo1, Tabla1.Campo2, Tabla1.Campo3, Tabla1.Campo4, DCount("Campo4","tabla1","Campo1=" & [Campo1] & " AND Campo2=" & [Campo2] & " AND Campo3=" & [Campo3] & " AND Campo4='" & [Campo4] & "'");
Llamad por ejemplo: ConsultaAux
Luego otra:
SELECT ConsultaAux.Campo1, ConsultaAux.Campo2, ConsultaAux.Campo3, Max(ConsultaAux.ContarCampo4) AS MáxDeContarCampo4
FROM ConsultaAux
GROUP BY ConsultaAux.Campo1, ConsultaAux.Campo2, ConsultaAux.Campo3;
Llamada: consultaAux2.
Y la final:
SELECT ConsultaAux.Campo1, ConsultaAux.Campo2, ConsultaAux.Campo3, ConsultaAux.Campo4, ConsultaAux.ContarCampo4
FROM ConsultaAux INNER JOIN ConsultaAux2 ON (ConsultaAux.ContarCampo4 = ConsultaAux2.MáxDeContarCampo4) AND (ConsultaAux.Campo3 = ConsultaAux2.Campo3) AND (ConsultaAux.Campo2 = ConsultaAux2.Campo2) AND (ConsultaAux.Campo1 = ConsultaAux2.Campo1);
Seguro que hay una forma más fácil de hacerlo. Por supuesto con VBA. Pero esto, con SQL, funciona.
Respuesta
1
Prueba este código:
SELECT TOP 1 tabla.campo1, tabla.campo2, tabla.campo3, tabla.campo4, Count(*) AS numeroRepeticiones
FROM tabla
GROUP BY tabla.campo1, tabla.campo2, tabla.campo3, tabla.campo4
ORDER BY Count(tabla.campo4) DESC;
Creo que es el que buscas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas