先找出姓名,再找出电话,分2句sql语句就行了
distinct是不能同时修饰2个属性的,“select
distinct
姓名,电话”这样是错误的,
象下面的数据:
张三
123
张三
222
李四
123
如果你用"select
distinct
姓名,电话"的话,那么是去掉第二条还是第三条数据呢?所以电脑是无法处理的,所以distinct只能修饰一个属性
错的一塌糊涂
后面一大段全都是VBA的代码,VB根本不识别
arr是二维的,ubound后面还要加上维度
字典赋值写得什么乱七八糟的
你set的xlbook和xlsheet用了么
最后来一句visible=true也没用,你前面也没写false,人家本来就是true
别用手机拍屏幕,截图键是print screen
既然习惯用VBA的代码,你就直接用VBA做好了,没必要硬去用VB
'说实话,这个对于新手是很难得!
'举个例子arr()数组为1-10的10个值,brr()数组为1-3的3个值
'去重之后的数组赋值到crr(),然后打印验证。
'有问题可以问我,运行效果如上图,代码如下:
Private Sub Command1_Click()
Dim arr(10), brr(3) As Integer
Dim crr(10)
Dim i, j, x, n, s As Integer
Dim a, b As Integer
m = 1
For i = 1 To 10
arr(i) = i
Next i '将1-10赋值给数组arr
brr(1) = 1
brr(2) = 2
brr(3) = 3 '将1-3赋值给数组brr
For j = 1 To UBound(brr())
x = 1
For x = 1 To UBound(arr())
If arr(x) = brr(j) Then
For n = x To UBound(arr) - 1
arr(n) = arr(n + 1)
Next n
s = s + 1
End If
Next x
Next j
Print "去重复后数组元素为:"
For a = 1 To UBound(arr()) - s
crr(a) = arr(a)
Print crr(a);'最终去重后的数据存入crr数组并打印验证
Next a
End Sub
Function array_unique(ByRef srcArray)
If Ubound(srcArray) <= 0 Then '小于2个不用去重
array_unique = srcArray
Exit Function
End If
'这里用字典,带key=>value映射,比较方便
Dim dict1: Set dict1 = ServerCreateObject("ScriptingDictionary")
Dim dictWillDel: Set dictWillDel = ServerCreateObject("ScriptingDictionary")
Dim i
For i = 0 To Ubound(srcArray) '循环要去重的数组
If dict1Exists(srcArray(i)) Then 'dict1里面已经有这个值了,说明这个值有重
dictWillDelAdd i '把要去掉的元素的下标记录到dictWillDel里
Else '至目前为止没有重复
dict1Add srcArray(i) '那就记下来,再碰到这个值就说明有重复了
End If
Next
Dim newArray: Redim newArray(0) '建立一个新数组,把srcArray里面不需要去掉的值存进来,因为要在srcArray里面去掉一个元素不太方便
Dim n: n = 0
For i = 0 To Ubound(srcArray)
If Not dictWillDelExists(i) Then '这个下标在dictWillDel里没有,说明不用删除这项
'那就存下来
Redim Preserve newArray(n)
newArray(n) = srcArray(i)
n = n + 1
End If
Next
array_unique = newArray
srcArray = newArray
End Function
关键是这个“几万”。在vb中,数组的大小是有限的,也刚好是“几万”。简单点的办法是利用数据库。
取每一行的内容,hash值保存到一个表中,hash字段为主键,它就不允许重复,添加数据时就可以完成去重。
然后用随机数从里面取记录就好,取一条记录就删除一条,伪代码如下:
for i=行数 to 1 step -1
行号=int(rnd()i+1)
行内容 = 读记录(行号)
删记录(行号)
输出(行内容+CRLF)
next
如果不想使用数据库,也可以使用链表或二叉树/B树。在vb中实现链表比较费空间,而且链表在去重方面效率不高。使用树则在去重方面会很高,随机取出则低,你也可以结合二者来使用。完全在vb中实现的话,建议只保存每行的hash和行的开始偏移及行长度,这样会节约一点内存,但文件IO就会高一些。
这个方法很多的:都需要循环来完成
1,可以采用循环搜索比较,从上到下进行,一一排除。
2,也可以采用,读取到数组里,排除重复。
下面是方法一的代码。
Dim i As Integer
Dim j As Integer
i = 0
Do While i < List1ListCount - 1
j = i + 1
Do While j <= List1ListCount - 1
If List1List(i) = List1List(j) Then
List1RemoveItem j
Else
j = j + 1
End If
Loop
i = i + 1
Loop
以上就是关于distinct用法(VB与ACCess)去除重复项全部的内容,包括:distinct用法(VB与ACCess)去除重复项、vb6字典的使用。去重,合并数据,试了试,提示402错误。哪里不对、VB一个数组去除另一个数组中的元素等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)