cómo usar distinct en ms access

Tengo dos tables. Tarea y categorías.

Tabla de tareas

Tabla de categorías

TaskID no es una key primaria ya que hay valores duplicates. Cuando se seleccionan múltiples contactos para una tarea específica, taskid y otros detalles se duplicarán. Escribí la consulta:

SELECT Priority, Subject, Status, DueDate, Completed, Category FROM Task, Categories WHERE Categories.CategoryID=Task.CategoryID; 

Resultado de la consulta

Ahora, al seleccionar múltiples contactos para esa tarea, para taskid = T4, hay dos loggings (resaltados con gris). He intentado usar distinct en ms access 2003 pero no funciona. Quiero mostrar loggings distintos (Aquí no hay ningún requisito para mostrar taskid) Si escribo:

 select priority, distinct(subject), ....... 

y permaneciendo igual como se menciona en la consulta anterior, entonces me da un error. He intentado distinguir también. Pero no tuve éxito. ¿Cómo get valores distintos en ms access?

Bien. Está trabajando de esta manera.

 SELECT DISTINCT Task.Priority, Task.Subject, Task.Status, Task.DueDate, Task.Completed, Categories.Category FROM Task, Categories WHERE (((Categories.CategoryID)=[Task].[CategoryID])); 

No me gusta usar SELECT DISTINCT. He descubierto que hace que mi código tarde más en comstackrse. La otra forma en que lo hago es usando GROUP BY.

  SELECT Priority, Subject, Status, DueDate, Completed, Category FROM Task, Categories WHERE Categories.CategoryID=Task.CategoryID GROUP BY Subject; 

No tengo VBA en este momento, pero esto debería funcionar también.

El uso de SELECT DISTINCT funcionará para usted, pero una solución mejor aquí sería cambiar el layout de su database.

Los loggings duplicates pueden llevar a datos inconsistentes. Por ejemplo, imagine tener dos estados diferentes en diferentes loggings con el mismo TaskID. ¿Cuál estaría en lo cierto?

Un mejor layout includeía algo así como una tabla de tareas, una tabla de contactos y una tabla de asignación, de la siguiente manera (los campos entre paréntesis son PK):

Tareas: [TaskID], TaskPriority, Subject, Status, DueDate, Completed, StartDate, Owner, CategoryID, ContactID, …

Contacto: [ID], nombre, apellido, dirección, número de teléfono, …

Asignación: [TaskID, ContactID]

Luego, puede recuperar las Tareas con un simple SELECCIONAR de las tablas de Tareas. Y siempre que necesite conocer los contactos asignados a las Tareas, lo haría utilizando la cláusula JOIN, como esta

 SELECT T.*, C.* FROM TaskID as T INNER JOIN Assignment as A ON T.TaskID = A.TaskID INNER JOIN Contac as C ON A.ContactID = C.ID 

O similar. Puede filtrar, orderar o agrupar los resultados usando toda la potencia de consulta de SQL.