как использовать отчетливый в MS Access - PullRequest
6 голосов
/ 26 апреля 2011

У меня есть две таблицы. Задача и Категории.

Task Table

Categories Table

TaskID не является первичным ключом, так как есть повторяющиеся значения. При выборе нескольких контактов для конкретной задачи, Taskid и другие детали будут дублироваться. Я написал запрос:

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

Query Result

Теперь, когда для этой задачи выбрано несколько контактов, для taskid = T4 есть две записи (выделены серым цветом). Я пытался использовать отчетливый MS Access 2003, но он не работает. Я хочу отображать отдельные записи. (Здесь нет необходимости показывать taskid) Если я напишу:

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

и оставаясь таким же, как упомянуто в запросе выше, это выдает ошибку. Я попробовал также и другие. Но не добился успеха. Как получить разные значения в мс доступа?

Ответы [ 3 ]

8 голосов
/ 26 апреля 2011

Хорошо. Так работает.

SELECT DISTINCT Task.Priority, Task.Subject, Task.Status, Task.DueDate, 
Task.Completed, Categories.Category
FROM Task, Categories
WHERE (((Categories.CategoryID)=[Task].[CategoryID]));
5 голосов
/ 14 ноября 2013

Мне не нравится использовать SELECT DISTINCT, я обнаружил, что мой код компилируется дольше.Другой способ сделать это - использовать GROUP BY.

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

В данный момент у меня не работает VBA, но это также должно работать.

2 голосов
/ 21 ноября 2013

Использование SELECT DISTINCT будет работать для вас, но лучшим решением будет изменение структуры вашей базы данных.

Повторяющиеся записи могут привести к несогласованности данных. Например, представьте, что у вас два разных состояния в разных записях с одним и тем же TaskID. Какой из них будет прав?

Лучший дизайн будет включать что-то вроде таблицы задач, таблицы контактов и таблицы назначений следующим образом (поля в скобках - это PK):

Задачи: [TaskID], TaskPriority, Subject, Status, DueDate, Completed, StartDate, Owner, CategoryID, ContactID, ...

Контакт: [ID], имя, фамилия, адрес, номер телефона, ...

Назначение: [TaskID, ContactID]

Затем вы можете получить Задачи простым SELECT из таблиц Задач. И всякий раз, когда вам нужно знать контакты, назначенные Задачам, вы должны делать это, используя предложение 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.

...