2017-11-06 2 views
0

Wir haben eine Access-Datenbank erstellen Sie eine CSV-Liste in einer Zugriffstabelle für jede Benutzer-ID, die sich an einem Computer anmeldet. Das Problem besteht darin, dass die Benutzer-ID dupliziert wird, wenn sich eine Benutzer-ID mehrmals auf einem Computer anmeldet.Einmalige Records für Feld zurückgeben

Sagen wir also, das ist, was die Tabellenstruktur wie

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

schaut Und das ist, was ich will eine Abfrage

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

Ich habe versucht, unter Verwendung von sowohl Group By und Distinct aber das sieht auf zurückkehren Zeile für Zeile, keine Feldbasis

Wie kann dies in Access 2013 erreicht werden?

+1

Dieses Problem am besten durch die Fixierung gelöst werden würde Format der ursprünglichen Tabelle. Haben Sie Kontrolle über die Struktur dieser Tabelle? – YowE3K

+0

@ YowE3K - wir arbeiten daran, die Struktur der ursprünglichen Tabelle zu beheben - aber brauchen einen Weg, um die Daten, die bereits "Müll" in der Tabelle ist zu analysieren. – IcyPopTarts

+0

Was machst du mit den Abfrageergebnissen? (Wenn Sie es nicht in der Abfrage selbst getan hätten, wäre es eine relativ einfache Übung in VBA, die Abfrageergebnisse zu übernehmen, jeden Datensatz auf '' 'aufzuteilen, alle Duplikate zu entfernen und die verbleibenden Elemente wieder zusammenzufügen tun, was auch immer Sie mit den Daten tun.) – YowE3K

Antwort

2

Sie können eine benutzerdefinierte Funktion in VBA erstellen, um nur die eindeutigen Benutzer zurückzugeben.

Fügen Sie diese in einer VBA-Modul:

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 

Verbrauch:

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

Eingangsdaten und Abfrageergebnisse:

enter image description here

+0

Funktioniert genau wie benötigt! Vielen Dank für die wertvolle Einsicht und Syntax! Ich wünschte, ich könnte zweimal Upvote! – IcyPopTarts

+1

@IcyPopTarts Ich werde die extra +1 für Sie hinzufügen;) – YowE3K