как использовать distinct в ms access
у меня есть две таблицы. Задачи и категории.
TaskID не является первичным ключом, поскольку существуют повторяющиеся значения.Если для конкретной задачи выбрано несколько контактов, taskid и другие сведения будут дублироваться.Я написал запрос:
SELECT Priority, Subject, Status, DueDate, Completed, Category
FROM Task, Categories
WHERE Categories.CategoryID=Task.CategoryID;
теперь, когда для этой задачи выбрано несколько контактов, для taskid=T4 есть две записи (выделены серым цветом). Я пробовал использовать отличается в ms access 2003, но не работает. Я хочу показать отчетливые записи. (Здесь нет требования показывать taskid), если я напишу:
select priority, distinct(subject), .......
и оставаясь таким же, как указано в вышеуказанном запросе, то это дает мне ошибку. Я также пробовал distinctrow.Но успеха не добился. Как получить различные значения в ms access?
3 ответов
ОК.Это работает таким образом.
SELECT DISTINCT Task.Priority, Task.Subject, Task.Status, Task.DueDate,
Task.Completed, Categories.Category
FROM Task, Categories
WHERE (((Categories.CategoryID)=[Task].[CategoryID]));
мне не нравится использовать SELECT DISTINCT, я обнаружил, что это заставляет мой код дольше компилироваться. Другой способ сделать это-использовать GROUP BY.
SELECT Priority, Subject, Status, DueDate, Completed, Category
FROM Task, Categories
WHERE Categories.CategoryID=Task.CategoryID
GROUP BY Subject;
на данный момент у меня нет VBA, но это должно работать.
использование SELECT DISTINCT будет работать для вас, но лучшим решением здесь было бы изменить дизайн вашей базы данных.
повторяющиеся записи могут привести к несогласованным данным. Например, представьте, что у вас два разных статуса в разных записях с одним и тем же TaskID. Который из них был бы прав?
лучший дизайн будет включать что-то вроде таблицы задач, таблицы контактов и таблицы назначений, как показано ниже (поля в скобках-это PK):
задачи: [Идентификатор_задачи], TaskPriority, Тема, Статус, Duedate, Которые, Завершена, Начальная Дата, Владелец, Кодтипа, Идентификатор Contactid, ...
контакт: [ID], имя, фамилия, адрес, номер телефона, ...
Назначение: [TaskID, ContactID]
затем вы можете получить задачи с помощью простого выбора из таблиц задач. И всякий раз, когда вам нужно знать контакты, назначенные задачам, вы бы сделали это, используя предложение JOIN, например
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
или аналогичные. Вы можете фильтровать, сортировать или сгруппируйте результаты, используя всю мощность запросов SQL.