1

私は無駄に探し回ってみたので、うまくいけばここであなたが助けることができるでしょう。私はこれに数日間苦労しています。それが答えに役立つ場合、データはMSAccessにあります。これが適切なプログラムでない場合は、進め方に関するこの提案に使用することを歓迎します。

私はテーブル1と2から始めて、テーブル3で終わりたいと思っています(以下のように)。

Field2(table1)とField4(table2)は同じ値です(同一)。ただし、結合しようとすると2つの同じ値(つまり1000)があるため、重複が多すぎます。基本的に、フィールド1のファイナルテーブルに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 に答える