我试过无所事事,所以希望你能在这里帮忙。我几天来一直在努力解决这个问题。如果这有助于答案,则数据在MS Access中。如果这不是正确的程序,可以使用这个关于如何进行的建议非常受欢迎。
我从表1和表2开始,并希望最终得到表3(如下所示)。
Field2(table1)和Field4(table2)是相同的值(相同)。但是,因为当我尝试连接时它们具有2个相同的值(即1000),所以它会产生太多的重复。我基本上希望在字段1的最后一个表中只出现一次(没有重复)并且它第一次调用字段3中的值而不重复该值(可能存在相同的值,但它们将具有与它们关联的不同Field4 )。
表2中存在的值多于表1中存在的值,有些值需要跳过(即表2中的值1002在表1中没有匹配的“L”值,因此可以忽略)。我不想要的结果的一个例子如表4所示,以供参考。表1可能有一些“L”值,这些值不在表2中,但我仍然希望那些带有空白或填充N / A的单元格返回...
非常感谢!
表1
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 - 我想要的结果
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-我不希望L1和L2重复的结果。
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 :(得分: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