access重复数据累计_Access 查询同一张表中两个或以上字段含有重复项的记录
這篇文章是對我自己另一篇文章的補充。(
Access 查詢同一張表中某個字段含有重復項的記錄)
記錄的動力總是來自于工作中遇到的問題。上次只要根據某個字段把有重復項的記錄列出來,這次條件增多了,要根據兩個或兩個以上字段來判斷,當這些字段的值全部相同時,才認為出現了重復記錄。
還是以上次的數據為例吧,略有修改。表名 Student
ID
Name
City
Address
1
徐俊
北京
北京市東四北大街520號
2
王洪濤
北京
北京市西單北大街151號
3
張立濤
大連
大連市西崗區新開路69號
4
佘高峰
濟南
山東省濟南市濼文路50號
5
徐俊
上海
上海市靜安區南陽路46號
6
張忠飛
上海
上海市肇嘉浜路414號
7
徐俊
上海
上海市乳山路150號
從城市角度看,一個城市有很多學員很正常;中國人重名的多,單看名字很難說是不是同一個人。這次我們的查詢要結合“City”和“Name”兩個字段,只有這兩個字段的值都相等,我們才進一步檢查是不是同一個人。
先用Access 2003 提供的“查找重復項查詢向導”生成一個查詢看看:
SELECT student.Name, student.City, student.Address
FROM student
WHERE ((student.Name) In (SELECT [Name] FROM [student] As Tmp GROUP BY [Name], [City] HAVING Count(*)>1? And [City] = [student].[city]))
ORDER BY student.Name, student.City
結果是:
Name
City
Address
徐俊
上海
上海市乳山路150號
徐俊
上海
上海市靜安區南陽路46號
注意:徐俊 北京 沒有列出來,符合我們的預期,因為我們這次是兩個標準。
不過我覺得Access 的向導生成的語句有點搞,看上去不是那么一目了然。
這條SQL語句依然用了子查詢“select name from student group by name, city ?having count(*)>1”。這個子查詢的意思是:把student表里的記錄同時按名字和城市組合在一起,并把組合后數量大于1的記錄返回。就這個例子而言,這條子查詢的返回值是“徐俊/上海”。
但是跟單個字段查找重復值不一樣的地方是,這次多了個“And [City] = [student].[city]”,我們這次的子查詢的全部內容是:
select name from student as Tmp group by name, city ?having count(*)>1 And [City] = [student].[city]
這個子查詢有外部條件,這就讓事情有點復雜了。在子查詢里使用外部條件,需要對SQL 語句使用的相當熟練和有技巧。
我換了種SQL的寫法來達到同樣效果,自己覺得看上去清晰點。
SELECT student.Name, student.City, student.AddressFROM student? inner join(SELECT Name, city ?FROM student? GROUP BY Name, City ?HAVING Count(*)>1? ) As TmpON? student.Name=Tmp.Name? AND student.city = Tmp.cityORDER BY student.Name, student.City
總結
以上是生活随笔為你收集整理的access重复数据累计_Access 查询同一张表中两个或以上字段含有重复项的记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1个ieee1394端口_ieee139
- 下一篇: 钉钉提示请勿通过开发者调试模式_钉钉开放