Count(distinct campo)

Tengo la siguiente query:
SELECT DISTINCT USUARIOS.Nacionalidad, Count(DISTINCT USUARIOS.Nacionalidad) AS Expr1
FROM ACTUACIONES INNER JOIN USUARIOS ON ACTUACIONES.CodExp=USUARIOS.CodExp
WHERE DateDiff("d", FechaDesde,[FechaActuacion])>=0 AND DateDiff("d",FechaHasta, FechaActuacion])<=0
GROUP BY USUARIOS.Nacionalidad;
Pretendo obtener el numero de usuarios por nacionalidad a los cuales se les haya hecho alguna actuación en su expediente durante las fechas desde y hasta introducidas como parámetros.
PROBLEMA: no me funciona el distinct dentro del count, entonces me saca todas las nacionalidades resultado del join (más nacionalidades que usuarios). Pregunta: ¿Admite el count(distinct campo) el sql de Access? O acaso estoy planteando mal la query. No se si me he explicado bien.
Respuesta
1
Sugiero que le elimines el distinct al count, ya que lo estas incluyendo en forma directa desde la primer parte del select.
SAludod
David Enciso
La relación entre USUARIOS Y ACTUACIONES es 1:N. En la tabla usuarios tengo 200 registros, en la tabla ACTUACIONES tengo 1000. Lo que intento es sacar el numero de usuarios por nacionalidad, si quito el distinct del count, me saca, 929 españoles y 23 alemanes, en total 952 usuarios, y yo solo tengo 200. ¿Entiendes? Es como si antes hiciese el count y luego ejecutase la condición del join. Da igual que ponga distinct al principio de la select o que no. Es un lio, el caso es que en oracle, por ejemplo si que funciona el distinct dentro del count, y en access me dice que falta operador en la expresión de consulta count(distinct USUARIOS. Nacionalidad). Bueno, muchas gracias por tu tiempo.
Y funcionará de la siguiente forma:
SELECT DISTINCT (USUARIOS.Nacionalidad, Count(USUARIOS.Nacionalidad)) AS Expr1
FROM ACTUACIONES INNER JOIN USUARIOS ON ACTUACIONES.CodExp=USUARIOS.CodExp
WHERE DateDiff("d", FechaDesde,[FechaActuacion])>=0 AND DateDiff("d",FechaHasta, FechaActuacion])<=0
GROUP BY USUARIOS.Nacionalidad;
Hola! No funciona, Access dice que hay un error de sintaxis (q sobra la coma dentro de los paréntesis). La he probado también sin el alias (Expr1), pero sigue dando el mismo error. He optado por crear una tabla auxiliar con todos los expedientes (distintos) q tienen actuaciones en ese periodo de fechas, y hacer un join entre esta tabla y la de usuarios; es un poco más largo pero el resultado es real. Muchas gracias por todo.
Saludos.
Cristina.

1 respuesta más de otro experto

Respuesta
1
Cuando utilizas el count, debes de utilizar el GROUP BY
Eso es lo que te falta
Hola, creo que no me expliqué bien, ya utilizo el group by, agrupo por USUARIOS. Nacionalidad, lo mismo que pido en la select, pero no hay manera, ACCESS me dice que falta operador en la experesion de consulta count(distinct USUARIOS. Nacionalidad). De todas formas, lo he solucionado utilizando una tabla auxiliar con los DISTINTOS códigos de expedientes con actuaciones en esas fechas. Tu sabes, algo más de trabajo, pero bueno... Muchísimas gracias por tu tiempo.
Ok Kriki,
Entonces califica mi esfuerzo para cerrar la pregunta porque sino queda abierta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas