
总结:
两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、(1)对于第一种重复,比较容易解决,使用复制代码代码如下:select distinct * from tableName
(2)如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除,复制代码代码如下:
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
2、假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集,复制代码代码如下:
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
distinct 校区,学员 这个关键字只能查询出 校区和学员 二个字段的记录,不能查询其他字段的记录
需要其他的字段内容需要二步完成
用 VB6 的ADO 对象 做个例子,供参考
Dim cnn As New ADODB.Connection, Rs As New ADODB.Recordset, AA As IntegerDim XQ() As String, XY() As String
'cnn 连接数据库略
'第一步 ,将 校区,学员---- 去重
Rs.Open "Select distinct 校区,学员 From 数据表名", cnn, 3, 2
AA = Rs.RecordCount '得到去重后的记录总数
ReDim XQ(1 To AA), XY(1 To AA)
Dim K As Integer
Do While Not Rs.EOF
K = K + 1
XQ(K) = Rs!校区: XY(K) = Rs!学员 '将 校区,学员 自动存储在二个数组中
Rs.MoveNext
Loop
Rs.Close
Set Rs = Nothing
'第二步 就可以在 MSHFlexGrid1 控件得到你需要的字段记录
MSHFlexGrid1.Clear
MSHFlexGrid1.Visible = True
With MSHFlexGrid1
.Cols = 6 '如果显示字段多,修改显示列的数据即可
.Rows = 1 + AA
.TextMatrix(0, 0) = "序号"
.TextMatrix(0, 1) = "校区"
.TextMatrix(0, 2) = "学员"
.TextMatrix(0, 3) = "字段3"
.TextMatrix(0, 4) = "字段4"
.TextMatrix(0, 5) = "字段5"
'.................. 在这里继续添加其他列的名称
For I = 1 To AA
Rs.Open "Select * From 数据表名 Where 校区='" & XQ(I) & "' AND 学员='" & XY(I) & "'", cnn, 3, 2
.TextMatrix(I, 0) = I
.TextMatrix(I, 1) = Rs!校区
.TextMatrix(I, 2) = Rs!学员
.TextMatrix(I, 3) = Rs!字段3
.TextMatrix(I, 4) = Rs!字段4
.TextMatrix(I, 5) = Rs!字段5
'.................. 在这里继续添加其他列的数据
Rs.Close
Set Rs = Nothing
Next I
End With
cnn.Close
Set cnn = Nothing
'由于你的图片看不清,所以用字段1、字段2、字段3......代替了。
'还有一种方法就是新创建一个表,只包含 校区 与 学员 二个字段,使用新的表查询原来的表。
很简单,无需使用高级函数即可实现,假设你的表是用户表,表中有姓名和电话两列:select 姓名,电话,count(*) as '条数' from 用户表
group by 姓名,电话
having count(*)>1
即可找出用户姓名,电话,以及重复条数。
如果高级一点的,可以使用开窗函数,进行组内排名,比如使用rank函数也可以实现。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)