2012-11-12 3 views
1

아무런 도움이되지 않았으므로 여기서 도움을받을 수 있습니다. 나는 며칠 동안 이것을 고심하고 있었다. 답변이 도움이되면 데이터는 MS Access에 있습니다. 이것이 올바른 진행 방법에 관한 제안을하기에 적합한 프로그램이 아니라면 대단히 환영합니다.테이블에 쿼리하여 중복 된 데이터 무효화

임 테이블 1과 2로 시작하여 아래 표 3으로 끝나기를 원합니다.

Field2 (table1) 및 Field4 (table2)는 동일한 값 (동일 함)입니다. 그러나 결합을 시도 할 때 두 개의 동일한 값 (예 : 1000)이 있으므로 너무 많은 중복을 만듭니다. 나는 기본적으로 필드 1에 대한 최종 테이블을 한 번만 표시하고 (중복 없음) 필드 3의 값을 처음 호출하면 해당 값을 복제하지 않습니다. (동일한 값이있을 수 있지만 서로 연결된 다른 Field4가 있습니다.).

표 2는 표 1에있는 값보다 많은 값을 가지며 일부는 건너 뛸 필요가 있습니다. 즉 Table2의 값 1002는 Table1에 "L"값이 없으므로 무시할 수 있습니다. 내가 원하지 않는 결과의 예가 참조 용으로 표 4에 나와 있습니다. 표 1에는 표 2에없는 "L"값이있을 수 있지만 공백 또는 N/A로 채워진 셀로 반환 된 값은 여전히 ​​유용합니다.

많은 감사!

Field1 Field2 
L1  1000 
L2  1000 
L3  1001 
L4  1003 
L5  1005 

2

Field3 Field4 Field5 Primary Key 
4.5  1000 2000 1 
3.4  1000 2000 2 
2.4  1001 2001 3 
1.7  1002 2002 4 
1.4  1003 2003 5 

표 3 표 - L1 및 L2가 중복되고 내가 원하지 않는 내가

Field1 Field2 Field3 Field5 
L1  1000 4.5 2000 
L2  1000 3.4 2000 
L3  1001 2.4 2001 
L4  1003 1.4 2003 
L5  1005 NA  NA 

표 4-결과를 원하는 결과 .

Field1 Field2 Field3 Field5 
L1  1000 4.5 2000 
L1  1000 3.4 2000 
L2  1000 4.5 2000 
L2  1000 3.4 2000 
L3  1001 2.4 2001 
L4  1003 1.4 2003 
+0

표 1의 필드 1은 어떤 필드와 관련이 있습니까? 샘플 데이터 세트에 따라 표 2에서 원하지 않는 "L"값을 걸러내는 값이 누락 된 것처럼 보입니다. 원치 않는 결과를 얻으려는 SQL을 게시 할 수 있습니까 (table4)? – jn29098

+0

이미 언급했듯이 한 테이블의 두 행이 다른 행의 두 행과 일치 할 때 결과 행이 네 개가 될 수 있으며 DBMS는 기본적으로 모든 행을 반환합니다. 이 행 중 어느 행을 보관해야하는지 결정하기 위해 어떤 기준을 사용하고 싶습니까? –

+0

@ jn29098 죄송합니다, 지금 당장은 없지만 내일은 업데이트 할 수 있습니다. 필드 2는 필드 4와 관련이 있습니다. 값이 일치합니다. – losty

답변

0

일반 SQL을 사용하여 질문에 대답 할 수 없다고 생각됩니다. 하지만 VBA를 사용하면 필요한 행만 추출 할 수 있습니다.

Sub ExtractNoDuplicates() 
    Dim Rs As Recordset 
    Dim precField1 As Variant 
    Dim precField2 As Variant 
    Dim precID As Variant 

    precField1 = Null 
    precField2 = Null 
    precID = Null 

    Set Rs = CurrentDb.OpenRecordset("Select * from Table1 left join Table2 on table1.Field2 = table2.Field4 order by Field2, Field1, ID") 

    While Not Rs.EOF 
    If (IsNull(precID) Or IsNull(precField1)) 
     Or (precField1 <> Rs("Field1") And Rs("ID") > precID) 
     Or (precField2 <> Rs("Field2")) Then 

     precField1 = Rs("Field1") 
     precField2 = Rs("Field2") 
     precID = Rs("ID") 
     ' print the row - or add it to a temporary table 
     Debug.Print Rs("Field1"), Rs("Field2"), Rs("Field3"), Rs("Field5"), Rs("id") 
     End If 
    Rs.MoveNext 
    Wend 

    Rs.Close 
    Set Rs = Nothing 

End Sub 
관련 문제