2017-11-06 5 views
0

우리는 컴퓨터에 로그인하는 각 사용자 ID에 대한 액세스 테이블에 액세스 데이터베이스가있는 csv 목록을 만듭니다. 문제는 사용자 ID가 중복되는 것보다 한 컴퓨터에 여러 번 사용자 ID가 로그인하는 경우입니다.필드에 대한 고유 레코드 반환

는 SO의이 테이블 구조가

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

모습입니다 가정 해 봅시다 그리고 이것은 내가 쿼리 내가 모두 Group ByDistinct를 사용하여 시도

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

반환 할 것입니다하지만 보이는 필드 기준이 아닌 행 기준으로

어떻게 Access 2013에서이를 달성 할 수 있습니까?

+1

원래 표의 형식. 그 테이블의 구조를 제어 할 수 있습니까? – YowE3K

+0

@ YowE3K - 우리는 원래 테이블의 구조를 수정하려고 노력하고 있지만 테이블에서 이미 "쓰레기"인 데이터를 구문 분석하기 위해 액세스 할 방법이 필요합니다. – IcyPopTarts

+0

쿼리 결과로 무엇을하고 있습니까? (쿼리 자체에서이 작업을 수행 할 필요가 없다면 쿼리 결과를 취하고','에 각 레코드를 분할하고, 중복을 제거하고, 나머지 항목을 다시 결합하기 전에 VBA에서 비교적 간단하게 연습 할 수 있습니다 데이터로 무엇을하고 있든지간에 무엇이든 할 수 있습니다.) – YowE3K

답변

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

+0

정확히 필요한대로 작동합니다! 귀중한 통찰력과 구문에 대해 감사드립니다! 내가 두번 upvote 할 수 있으면 좋겠다! – IcyPopTarts

+1

@IcyPopTarts 추가 +1을 대신 추가하겠습니다.) – YowE3K