返回Field的唯一记录

时间:2017-11-06 23:09:27

标签: vba ms-access access-vba ms-access-2013

我们有一个访问数据库在访问表中为登录到计算机的每个用户标识创建一个csv列表。问题是如果用户标识在一台计算机上多次登录,则重复使用用户标识。

我们假设这就是表结构的样子

computer     DailyUsers
ABC-123      ml12, rs12, ml12, ml12, ee13
DEF-456      zx44, aa33, zx44

这就是我想要一个返回的查询

Computer     DailyUsers
ABC-123      ml12, rs12, ee13
DEF-456      zx44, aa33

我尝试同时使用Group ByDistinct但是逐行查找,而不是基于字段

如何在Access 2013中实现这一目标?

1 个答案:

答案 0 :(得分:2)

您可以在VBA中创建自定义功能,仅返回唯一身份用户。

在VBA模块中添加:

Option Compare Database
Option Explicit

Public Function DistinctOnly(txt As String)

    Dim arr, v, rv As String
    Dim d As Object

    arr = Split(txt, ",")
    If UBound(arr) > 0 Then
        Set d = CreateObject("scripting.dictionary")
        For Each v In arr
            d(Trim(v)) = 1
        Next v
        rv = Join(d.keys, ",")
    Else
        rv = txt
    End If

    DistinctOnly = rv
End Function

用法:

SELECT Table1.[ID], Table1.[Users], DistinctOnly(Table1.[Users]) as UsersX
FROM Table1;

输入数据和查询结果:

enter image description here