2011-04-26 75 views
6

我有兩個表。任務和分類。如何使用不同的ms訪問

Task Table

Categories Table

的TaskID是不是一個主鍵有重複values.When有被選擇用於特定任務的多個聯繫人,任務id和其他細節將duplicated.I寫道查詢:

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

Query Result

現在,作爲多爲該任務選擇聯繫人,對於taskid = T4,有兩條記錄(用灰色突出顯示)。我曾嘗試使用不同的訪問2003年,但它不工作。我想顯示不同的記錄。 (這裏沒有規定,以顯示任務id)如果我寫:

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

,並在上面提到的查詢那麼它給我一個錯誤其餘相同。我也嘗試了分歧,但沒有取得成功。如何在ms訪問中獲取不同的值?

+0

什麼是你的任務表的PK? – 2011-04-29 03:52:09

回答

8

好的。它的工作方式。

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

我不喜歡使用SELECT DISTINCT,我發現它使我的代碼花費更長的時間來編譯。另一種方式是使用GROUP BY。

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

我目前沒有VBA,但是這也應該可以。

1

使用SELECT DISTINCT將適合您,但更好的解決方案是更改數據庫設計。

重複的記錄可能會導致數據不一致。例如,假設在具有相同TaskID的不同記錄中有兩種不同的狀態。哪一個是對的?

更好的設計將包括類似任務表,聯繫表,分配表,如下(括號中的字段是PK):

任務:[的TaskID],TaskPriority,主題,狀態,交貨期,已完成,起始日期,所有者,類別ID,使用ContactID,...

聯繫方式:[ID],姓名,地址,******中國,......

分配:的TaskID,使用ContactID]

然後,您可以檢索具有as的任務從任務表中執行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的全部查詢能力對結果進行篩選,分類或分組。