1

我试过四处寻找无济于事,所以希望你能在这里提供帮助。我已经为此苦苦挣扎了几天。如果这有助于回答,数据在 MS Access 中。如果这不是用于此的正确程序,则非常欢迎您提出如何进行的建议。

我从表 1 和 2 开始,并希望以表 3 结束(如下所示)。

Field2(table1) 和 Field4(table2) 是相同的值(相同)。但是,因为当我尝试加入时它们有 2 个相同的值(即 1000),所以重复次数过多。我基本上希望在决赛表中字段 1 仅出现一次(无重复),并且第一次调用字段 3 中的值以不重复该值(可能存在相同的值,但它们将具有与之关联的不同 Field4 )。

表 2 的值比表 1 中的值多得多,有些需要跳过(即表 2 中的值 1002 在表 1 中没有匹配的“L”值,因此可以忽略)。表 4 中显示了我不想要的结果示例,以供参考。表 1 可能有一些不在表 2 中的“L”值,但我仍然希望返回的值要么是空白,要么是用 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
4

1 回答 1

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
于 2012-11-12T19:30:07.083 回答