2017-08-23 81 views
0

刪除列的所有值,但我有在MS Access 2013的表看起來像這樣:MSACCESS的條件

Id  Department  Status   FollowingDept   ActualArea 
    1000   Thinkerers  Thinking   Thinkerer    Thinkerer  
    1000   Drawers   OnDrawBoard  Drawers    Drawers 
    1000   MaterialPlan  To Plan   MaterialPlan  MaterialPlan 
    1000   Painters   MatNeeded   MaterialPlan   
    1000   Builders   DrawsNeeded  Drawers    

下表給出遵循其必須通過五個部門的ID,每個部門具有至少5種不同的狀態。

每個狀態具有FollowingDept值,像*Department* Thinkerers具有狀態MoreCoffeeNow這意味着*FollowingDept* Drawers

除ActualArea外的所有列都是從查詢的提要中獲取值的列。

ActualArea是expr其中我插入這樣的邏輯:

Iif(FollowingDept = Department, FollowingDept, "") 

我的邏輯很簡單,如果FollowingDept和系重合,則ID的ActualArea會從FollowingDept值。

但是,正如您所見,可能會出現少數情況,其中ID與上面的示例類似,其中3個部門與FollowingDept重合。這種情況很少見,但我想爲Access增加一些優先級。

Thinkerers具有最高優先級,然後是MaterialPlan,然後是Drawers,然後是建造者,最後是Painters。因此,遵循相同的例子,在ActualArea獲得3個值之後,Access將執行另一個查詢或子查詢或其他任何內容,它將評估每個值的優先級並僅留下具有最​​高優先級的那個值。因此在本例中,Thinkerers獲得最高優先級,其他兩個值從ActualArea列中刪除。

請記住有超過500個不同的ID,每個ID重複5次,所以總記錄來評估將是2500

回答

0

你需要另一個表,與actualArea和優先級的可能值數字,然後你可以用JOIN和秩序的優先選擇:

SELECT TOP 1 d.*, p.priority 
FROM departments d 
LEFT JOIN priorities p ON d.actualArea = p.dept 
WHERE d.id = 1000 
AND p.priority IS NOT NULL 
ORDER BY p.priority ASC 

的IS NOT NULL子句消除了所有的地方actualArea是空行。 TOP條件只保留具有最高優先級的行。

您的表似乎沒有主鍵。如果你不這樣做,那麼我會在一分鐘內給出另一個查詢,但我會強烈建議你回去並添加一個主鍵到表中。它會在以後爲你節省一筆令人難以置信的頭痛。我確實在我的測試表中添加了這樣一個密鑰,它被稱爲pID。該查詢利用該PID在刪除您需要的記錄:

DELETE FROM departments WHERE pID NOT IN (

    SELECT TOP 1 d.pID 
    FROM departments d 
    LEFT JOIN priorities p ON d.actualArea = p.dept 
    WHERE id = 1000 
    AND p.priority IS NOT NULL 
    ORDER BY p.priority ASC 

) 

如果你不能將主鍵添加到 actualArea被假定爲是唯一的數據,那麼你可以只使用actualArea值執行刪除操作:

DELETE FROM departments WHERE actualArea NOT IN (

    SELECT TOP 1 d.actualArea 
    FROM departments d 
    LEFT JOIN priorities p ON d.actualArea = p.dept 
    WHERE id = 1000 
    AND p.priority IS NOT NULL 
    ORDER BY p.priority ASC 

) AND id = 1000 

如果actualArea不會是唯一的,那麼我們就需要重新審視這個答案。這個答案也假設你已經有了身份證號碼。

+0

謝謝,我會按照你所說的添加一個新表格,看看它是如何發生的。實際上,假設一切順利,我將在ActualArea中提取每個ID。就像我所說的,在獲得正確的ActualArea後,有500個唯一ID每個重複5次,我將提取該記錄,以便我應該以另一個具有500個唯一ID的表結尾。感謝您的回答, – Eduardo

+0

如果您想在一個查詢中完成所有操作,那也是可以的。我可以告訴你如何做到這一點,如果原始查詢做你想做的事情。 –