• 締切済み

ACCESS2003でクエリの質問です

クエリを教えて下さい。 ACCESS2003でクエリを作成したいのですが テーブルに以下のようにデータが入っています。 ID   日付   項目あ 項目い 項目う 項目え 項目お 001 2009/08/27  A         B    C 001 2008/08/27  D    E         F    G 002 2009/08/27       H         I 002 2008/08/27  K    L         M 002 2007/08/27  K    L    O    M 同一IDで日付の新しいレコードを抽出するのですが、 もしNULLの項目があれば、日付の古いレコードから編集したいです。 結果としては以下のようなテーブルを作成したいです。 [002]の[項目お]の様に過去日付のものがNULLであれば編集はしません。 ID   日付   項目あ 項目い 項目う 項目え 項目お 001 2009/08/27  A    E    B    C    G 002 2009/08/27  K    H    O    I また以下のように過去日付のデータが異なる場合は 事前のチェックでエラーとして別テーブルに出すように考えていますが、 こちらも合わせて教えていただけると助かります。 ID   日付   項目あ 項目い 項目う 項目え 項目お 003 2009/08/27  N    O    P         Q 003 2009/08/27  N    O    P    R    Q 003 2009/08/27  N    O    P    S    Q SQLが苦手で困っています。 宜しくお願いします。

みんなの回答

noname#192382
noname#192382
回答No.1

エクセルではこの種の問題は楽と考えやってみました。このデータをエクセルにエクスポートし、データのないところには「ZZZ」を入れると、次のマクロで実行できました。計算結果は表の右側に出てきます。期日が同じときはdoubleddateのエラーメッセージが出てきます。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2009/8/27 ユーザー名 : ' Dim myid1 As String, myid2 As String, mydate1 As Date, mydate2 As Date, aa As String, bb As String, cc As String, dd As String, ee As String, mygyo As Integer, mygyo2 As Integer, myarray(8) As String, myclm As Integer, mymyclm As Integer, hajimegyo As Integer, zzz As String, mygyo3 As Integer, myid3 As Integer, mydate3 As String For mygyo = 2 To 9 myid1 = Cells(mygyo, 1) mydate1 = Cells(mygyo, 2) mygyo2 = mygyo + 1 myid2 = Cells(mygyo2, 1) mydate2 = Cells(mygyo2, 2) 'IDが同じか調査 If myid2 = myid1 Then hajimegyo = mygyo ' MsgBox (myid2) '期日が同じか調査 If mydate2 = mydate1 Then '期日が同じ MsgBox ("date doubled") MsgBox (mydate2) Else '期日が同じでない For myclm = 3 To 7 'データがZZZか調査 'MsgBox (Cells(mygyo, myclm)) If Cells(mygyo, myclm) = "zzz" Then 'データがZZZである myarray(myclm) = Cells(mygyo2, myclm) 'MsgBox (mygyo2) Else myarray(myclm) = Cells(mygyo, myclm) End If Next For myclm = 3 To 7 mymyclm = myclm + 7 Cells(mygyo, mymyclm) = myarray(myclm) Next End If Else End If '次のIDが同じか調査 mygyo3 = mygyo + 2 myid3 = Cells(mygyo3, 1) 'MsgBox (mygyo3) mydate3 = Cells(mygyo3, 2) If myid3 = myid1 Then '期日が同じか調査 If mydate3 = mydate1 Then '期日が同じ MsgBox ("date doubled") MsgBox (mydate3) Else '期日が同じでない For myclm = 3 To 7 'データがZZZか調査 mymyclm = myclm + 7 'MsgBox (Cells(mygyo, mymyclm)) If Cells(mygyo, mymyclm) = "zzz" Then 'データがZZZである myarray(myclm) = Cells(mygyo3, myclm) 'MsgBox (mygyo3) Else myarray(myclm) = Cells(mygyo, mymyclm) End If Next For myclm = 3 To 7 mymyclm = myclm + 7 Cells(mygyo, mymyclm) = myarray(myclm) Next End If End If 'MsgBox (myid1) Next ' End Sub

telele
質問者

お礼

ありがとうございます。 そうですね、エクセルで事前に処理するといった考えでも良いですね。 参考にさせていただきます。