[英]MS Access SQL If Row(n) = Row(n-1)
我正在開發一個訪問數據庫,在其中一個表輸入中,由於使用了一些舊軟件,由於以下原因,重復項經常出現在主鍵中(我最終希望成為主鍵):
ID | Fluid | Designer | Team |
--------------------------------------------------
A | Water | John | Piping |
A | Water | James | Piping |
B | Steam | Sam | Piping |
B | Steam | Sam | Modeling |
C | Hydrogen | Joe | Piping |
D | Steam | Joe | Piping |
參考ID字段的重復查詢產生:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | Water | John | Piping |
A | Water | James | Piping |
B | Steam | Sam | Piping |
B | Steam | Sam | Modeling |
不需要自動刪除這些重復項,因為重要的是要知道,例如,軟件模型已更改設計者或已轉移給另一個團隊。 因此,這些都是手動檢查的。
但是,此表最多可以包含30個字段,查找單個非重復字段可能會很麻煩。 這樣,我想要的輸出將是:
ID | Fluid | Designer | Team |
--------------------------------------------------
A | | John | |
A | | James | |
B | | | Piping |
B | | | Modeling |
我對SQL的經驗很少,但是花了一些時間使用Visual Basic,所以我的猜測可能是這樣的標准:
if(record(n)=record(n-1), display("")
但是,從我對訪問和SQL的基本理解中,我知道到目前為止,將可視化基礎與蘋果與橘子進行比較。
我正在運行MS Access 2007-2010。
編輯:現在研究規范化(抱歉,我是一個初學者)。 雖然在我的數據庫問題上有更多細節。 還更新了上面的決賽桌。
我認為我的數據庫應該如何工作:
該軟件中的錯誤源於以下事實:該軟件將新數據修改為先前存在的數據,但僅刪除精確的重復項。 如果說,不同的用戶在模型上工作,那么除了更新當前的ID外,它會添加一個新行,除了其他用戶外,所有其他細節都相同。
聽起來您正在尋找的是一種簡便的方法,可以直觀地發現相似記錄中較長列中的(少量)差異。 幾年前,我有一個非常類似的項目,該項目產生了一個報告,以查看用戶對其個人資料所做的更改。 我采用的方法是使用條件格式來突出顯示不同的字段。
在您的比較報告中,我還將ID
列與組標題分組 ,以便在組之間輕松實現視覺分隔。
對於報表中的比較公式,您可以比較組中字段的Min()
和Max()
值。 如果最小值和最大值相同,則字段在整個組中匹配。 如果不是,則可以使用條件格式突出顯示該字段。
我想如果您真的想花哨的話,可以擴展此表達式以使用運行總和以僅突出顯示第二條記錄中的更改。
另一種方法是為組中的后續記錄隱藏重復的值 。 這將涉及相同的分組概念,但是在報告中,您需要將字段上的Hide Duplicates
屬性設置為True
。 采用這種方法,您會在列表頂部看到完整的記錄,但是隨后的記錄的字段僅在值更改時才會顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.