営業日のみデータが入力されているテーブルを元に
非営業日(土日祝祭日など)のレコードを前営業日の
レコードを参照して補いたいと考えています。

例)

主キーがDT,NMのテーブルT1
に営業日のみデータが入力されている

DT NM FEE
==========
4/1 A 3
4/1 B 5
4/4 A 9
4/4 B 10


これをもとに、非営業日分(4/2,4/3)のレコードを
前(直近)営業日のデータで補った結果を作成したい。
Q1

DT NM FEE REF
==========
4/1 A 3
4/1 B 5
4/2 A 3 4/1 ←前営業日のレコードをもとに生成
4/2 B 5 4/1 ←前営業日のレコードをもとに生成
4/3 A 3 4/1 ←前営業日のレコードをもとに生成
4/3 B 5 4/1 ←前営業日のレコードをもとに生成
4/4 A 9
4/4 B 10

ちなみに列REFは何日のデータを参照して
レコードが生成されたかを表示する列です。


営業日にフラグを立てたカレンダーテーブルと結合
させてみたりしたのですが、どうもうまくいきません。

環境はACCESSです。

わかりにくい説明で申し訳ありませんが、
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

もう解決されているかもしれませんが、一応。


VBA にて行う例です。
■不足に事態に備えファイルのバックアップは必ず取って置いてください■

ツールの参照設定から Microsoft DAO 3.6 Object Library にチェックを入れてください。
以下を標準モジュールにコピペして実行してみてください
※この頃ポカが多いので検証はじっくりと・・・。

Sub test()
'要参照設定 DAO 3.6 Object Library
  Dim db As DAO.Database
  Dim rsFromA As DAO.Recordset
  Dim rsFromB As DAO.Recordset
  Dim rsTmp As DAO.Recordset
  Dim rsTo As DAO.Recordset
  Dim i As Long

  Set db = CurrentDb
  Set rsFromA = db.OpenRecordset("select DT from T1 group by dt order by DT", dbOpenSnapshot)
  Set rsFromB = db.OpenRecordset("select DT from T1 group by dt order by DT", dbOpenSnapshot)
  Set rsTo = db.OpenRecordset("select * from T1 order by DT", dbOpenDynaset)
  
  rsFromB.MoveNext
  
  Do Until rsFromB.EOF
    i = 0
    If rsFromA!DT <> rsFromB!DT Then
      
      Do Until rsFromB!DT = rsFromA!DT + i + 1
        
        Set rsTmp = db.OpenRecordset _
          ("select * from T1 where dt =#" & rsFromA!DT + i & "#", dbOpenSnapshot)
        i = i + 1
          
        Do Until rsTmp.EOF
          rsTo.AddNew
          rsTo!DT = rsFromA!DT + i
          rsTo!NM = rsTmp!NM
          rsTo!FEE = rsTmp!FEE
          rsTo!REF = rsFromA!DT
          rsTo.Update
          rsTmp.MoveNext
        Loop
        
        rsTmp.Close: Set rsTmp = Nothing
      Loop
    End If
    rsFromA.MoveNext: rsFromB.MoveNext
  Loop

  rsTo.Close: Set rsTo = Nothing
  rsFromA.Close: Set rsFromA = Nothing
  rsFromB.Close: Set rsFromB = Nothing
  db.Close: Set db = Nothing
End Sub
    • good
    • 0

ユニオンクエリはご存じでしょうか。


ユニオンクエリはSQL文を書かなければいけませんが、とても便利です。
たぶんこの場合に使えるでしょう。

手順として、
(1)前営業日のレコードを元に非営業日を表示したフィールドを設けたクエリ(条件で営業日のフィールドは非営業日の前営業日だけ表示するようにする。非営業日の前営業日はフラグでもたてたらいいでしょう。)を作る。
(2)営業日のみデータが入力されているテーブルと(1)で作成したクエリでユニオンクエリを作成する。
以上。

わかりにくい回答ですみません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード


人気Q&Aランキング