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

例)

主キーが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と関連する良く見られている質問

Qure売れない役者と売れない手品氏がタッグを組んだらなにがおきそうですか

ure売れない役者と売れない手品氏がタッグを組んだらなにがおきそうですか|売れない役者と売れない手品師がタッグを組んだら何がおきそうですか|題名のとおりです|自由な発想でもhito一言回答でもOK|先入観を除くため回答例は出しません|ではおねがいします

Aベストアンサー

パンの耳生活になる

むしろ自分なら「あきらめて別な仕事に就く」ですね

Q別のACCESSデータベースのテーブルのレコードを追加したいのです

別のACCESSデータベースのテーブルのレコードを追加したいのです

同じ内容のデータベースが二つあります
データベース1とデータベース2を其々別の人がデータを入力しています
データベース1にデータベース2のテーブルで T_データT_データ明細の二つのレコードを追加したいのですがどの様にすればよいでしょうか

ご指導をお願いいたします。

Aベストアンサー

レコードカウントで採番する場合は、

rsInMain.AddNew
rsInMain!番号 = rsInNUM!番号 + 1
rsInMain!項目1 = rsOutMain!項目1
rsInMain!項目2 = rsOutMain!項目2
j = rsInMain!番号
rsInMain.Update

のところで、

rsInMain!番号 = rsInNUM!番号 + 1



rsInMain!番号 = rsInMain.RecordCount + 1

に置き換えればいいです。

それと、

'T_番号の更新
rsInNUM.Edit
rsInNUM!番号 = rsInNUM!番号 + 1
rsInNUM.Update

の部分はコメントアウトするか削除します。


こちらの環境では、レコードソースを
クエリ、テーブル、SQLどれも問題はないのですが。
一応、簡単にT_テーブルでオートフォームでフォームを
つくり、あとボタンをくっつけた簡単な
フォームでやっています。

Q燃費の悪い中古車が売れない?

燃費の悪い中古車が売れない?鉄スクラップになるような予感がします。というのは、会社の人やうちの親も燃費がそう悪くはない現行オデッセイや1つ前のステップワゴンを売りに出そうとしています。いずれも街乗り7km/l程度ですが、現行のオデは、ハイオク仕様らしく、レギュラをいれるとノックするそうです。
こういった高年式の車でも売りが激しくなり、Kカー、ハイブリッド需要が多くなりそうな気がします。そうなると、根本的に中古車市場の売れない層の車両がタダ同然か価値なしになるような気がしますがどうでしょうか?今日、GMが大型ハマーの権利売却とリストラが発表され、自動車メーカーにも原油高騰のしわ寄せがきました。自動車業界にも関係のある営業をしていますので、原油高騰によるしわ寄せ情報を推測したいため、質問します。中古車市場はどうなるのでしょうか?

Aベストアンサー

>根本的に中古車市場の売れない層の車両がタダ同然か価値なしに

そういう時代が来るかも知れません。
が、もう少し先の話ではないでしょうか。

原油高は今後も続くと思われるので、代替燃料が本格的に検討される
でしょうし、プラグインハイブリッド車や電気自動車等も少しづつ
普及していくとは思います。

しかし例えば、ガソリン価格が170円から250円になったとして。
一カ月にガソリンを50リッター使う人の場合で、一月あたりの負担増
は4000円になるわけですよね。

一年間で4万8000円は、確かに大きいです。
しかし、それを節約するために「燃費のよい自動車を新たに購入する」
というのは、ちょっと現実的ではないと思います。
今後10年乗ったとしても、48万円しか回収できないわけですから。

また現在、中古車として流通している自動車もピンからキリまであり、
いわゆる格安車などは、支払い総額の中で諸費用の割合が非常に高く、
ある意味では
 「いま現在の社会情勢であっても、モノによっては価値なしの車体が
  中古車として堂々と流通している」
 「もともと中古車市場はそうした側面を持っており、国民も納得して
  受け入れている」
とも言えるのではないでしょうか。

あくまで個人的な意見ですが。

>根本的に中古車市場の売れない層の車両がタダ同然か価値なしに

そういう時代が来るかも知れません。
が、もう少し先の話ではないでしょうか。

原油高は今後も続くと思われるので、代替燃料が本格的に検討される
でしょうし、プラグインハイブリッド車や電気自動車等も少しづつ
普及していくとは思います。

しかし例えば、ガソリン価格が170円から250円になったとして。
一カ月にガソリンを50リッター使う人の場合で、一月あたりの負担増
は4000円になるわけですよね。

一年間で4...続きを読む

Qアクセスのフォームでデータ元をテーブルからクエリにかえたい

上手く表現できるかどうかわからないのですが、頑張って書きます。少々長いです。
アクセスでフォームを使ってデータ入力しています。これは単純で、あるテーブルへのデータ入力をフォームを使ってやるだけのことです。このテーブルの中に「都道府県」というフィールドがあります。ある事情からこのフォームを使ってデータ入力(または修正)をするレコードは、「都道府県」のフィールドが「福岡県」のものだけでよくなりました。
そこで、「都道府県」に「福岡県」を持っているレコードだけを取り出すクエリを作ります。このクエリを元にして、同じフォームでデータ入力したいのです。入力項目は全く同じです。「福岡県」をもっているレコードだけが全く同じフォームで表示されるようにしたいのです。
もとのテーブル名を「全データ」とし、クエリを「福岡県抽出クエリ」と呼ぶとすると、どこかで「全データ」を「福岡県抽出クエリ」に書き換えればすべてのテキストボックスのデータ元が入れ替わってくれると思うのですが、それでいいのでしょうか。その場合、どうやったらいいのでしょう。
なぜ一からファームを作り直さないかというと、テキストボックスの大きさや配置を決めるのに膨大な労力を費やしていて、全部をやり直したくないからです。
どうかお願いします。ご指導ください。

上手く表現できるかどうかわからないのですが、頑張って書きます。少々長いです。
アクセスでフォームを使ってデータ入力しています。これは単純で、あるテーブルへのデータ入力をフォームを使ってやるだけのことです。このテーブルの中に「都道府県」というフィールドがあります。ある事情からこのフォームを使ってデータ入力(または修正)をするレコードは、「都道府県」のフィールドが「福岡県」のものだけでよくなりました。
そこで、「都道府県」に「福岡県」を持っているレコードだけを取り出すクエリを作...続きを読む

Aベストアンサー

フォームをデザインビューで開き、
プロパティの[データ]タブの[レコードソース]にカーソルを置き、
右の▼をクリックして「福岡県抽出クエリ」を選択してください。

Q売れない映画。一体誰が悪いのでしょうか?

売れない映画。一体誰が悪いのでしょうか?
売れなくて、評判の悪い映画がたまにあります。
売れないのは誰の責任でしょうか?
原本を作った人でしょうか?それとも映画監督でしょうか?それとも主人公の演技力不足でしょうか?

原本が結構良くて映画は全く売れなかったのもありますし。
主人公の演技力不足が原因で売れなかった、とられるのもどうかと思います。なぜなら演技が下手な俳優を雇うなら他の俳優を雇えば良いわけですし、演技が下手なら監督がそれなりに指導すれば何とかなります。
「売れない映画=監督が悪い」場合が多いのでしょうか?

Aベストアンサー

>売れないのは誰の責任でしょうか?

プロデューサーでしょう。
要は広告の打ち方が下手だった。と。
広告の費用がなければ、それを
引っ張ってこれなかった人の責任ともいえるわけで。

Q対象範囲における入力日(固定)の設定と直近入力日の通知について

ど素人の質問ですみません。
会社で添付資料を作成しています。各担当者の作業が完了次第、チェックボックスにチェックを入れてもらい、チェックが入ると、関数で作業完了日を表示する設定をしました。(各担当者の作業を本資料において管理し遅滞ないよう後続作業へ繋げたいのです。)

ただ、ファイルを一旦閉じ、再度開くと日付が更新されてしまいます。レ点チェック=作業日にする方法を教えてください。
また、F列の範囲(F5:12)において、直近の日付(最終作業日)が入ると、同行J列に"最終作業者です"などと表示させたいのですが、どのような設定をすればよろしいでしょうか。
8項目中、8番手の作業=最終作業日という考えです。

説明が下手で申し訳ありませんが、ご回答をよろしくお願いします。

Aベストアンサー

チェックをすることでTODAYではなくその日の日付を入れるならマクロになります。
マクロでもいいならどなたか回答がくるかも知れません。
私はマクロは使わないので、提案するなら例えばマウス操作ならいけるのでしたらどこかの別セルにTODAY関数を入れておき、入力規則のリストでそのセルを参照しておけばプルダウンの候補に常に当日の日付がでて選べばその日付が入ります。

QCDが売れない

音楽のことが疎いので質問します。
CDが売れないとはよく聞くけど、携帯からダウンロードした方が安く音楽が聞けるのでしょうか?
CDが売れないといいながら携帯で安く購入できたら、安いほうが人気が出るのは仕方ないと思うのですが。

Aベストアンサー

一番の違いは「スピード」なんじゃないでしょうか?
今話題の新曲をすぐ手に入れたい、取り込みたいならダウンロードの方が早いでしょう。
CDは発売されるまでに時間がかかりますからね。

あとは、欲しい曲を欲しい分だけ、CDの収納場所もいらないというのが利点なんだと思います。
ただし、嗜好ジャンルによっても意見は分かれると思いますね。
普段あまり邦楽は聞かない私のような人は配信スピードはあまり重要ではありません。なので、もっぱらCD購入派ですね。
また、携帯ダウンロードも特別安いとは思いません。ダウンロード代+パケ代、それにサイトによっては月額使用料が別途かかりますから。

Q同一テーブルの別レコードの内容表示

SQLについて質問させてください。

年 月 売上
------------
2003 4 100
2003 5 200
2002 4 300

上記のようなテーブルがあるばあい

年 月 売上 前年
-----------------
2003 4 100 300
2003 5 200 0
2002 4 300 0

このような結果(前年、同月の売上の数値を
前年列に表示)を得るための View を
作成したいのですが、どうしたら
よいでしょうか。
データベースは Sybase です。
よろしくお願いいたします。

Aベストアンサー

 
自己結合を使えばできるでしょう。

SELECT ・・・・ FROM A表 Left Join A表 As 前年
ON A表.年月 = 1年加算(前年.年月)

ポイント(注意点)は

(1) Inner Join ではなく、Left Joinを使用する。(前年のレコードがない場合でもレコードを抽出するため)
(2) 同一の表を別の表として扱うため、エイリアスする。

(3) 結合条件は、単純に A表.年月 = 前年.年月 ではなく、1年加算(または減算)した値で結合する。

日付を加算する関数は、DBMSに依存すると思いますので、ご使用のDBMS(Sybase)でご確認ください。
 

Q事故物件の土地は売れない?

内容にもよると思いますが事故物件の土地は売れないのでしょうか?
相場よりも下げて売りに出してますがなかなか売れません。
売れたという方がいればどのような経緯と金額で売れましたか?

Aベストアンサー

都市部では安く帰るので、事故物件の人気が高い状況が続いています。
が、地方ではゲンを担ぐ人が多いので、敬遠される方が多いようです。

一般的には、不動産屋に一任するしか無いのが現状みたいですね。

案①
一旦、相場の金額に戻して、事故物件の説明時に値引いて、お得感を出す。

案②
親族の誰かに名義を一旦変えてから売る。
※税金が発生しますけど、一旦、他者の物になれば告知義務は無くなります。

案③
ちょっといやだけど、土地を担保に融資を受けて、そのまま差し押さえしてもらう。

案④
貸し駐車場にして数年活用する。

Q関連テーブルのレコード数の取得

SQL初心者です

関連テーブルのレコード数を取得したいのですがうまくいきません

テーブル名:user
user_id,user_name
1,aaa
2,bbb
3,ccc

テーブル名:user_agreements
user_id,money
1,5000
2,3000
2,5000
1,8000
2,4500
3,10000
3,2500

上記のようなデータがあった場合に、ユーザーIDと契約件数という結果を得たいと思っています

user_id,sum_agreements
1,2
2,3
3,2

このような結果を得る為のSQL文はどのように書けば宜しいでしょうか

宜しくお願い致します

Aベストアンサー

適正なインデックスがあれば特にスピードは変わらないと思いますが?

//元データ
create table user(user_id int,user_name varchar(20),index(user_id,user_name));
insert into user values(1,'aaa'),(2,'bbb'),(3,'ccc');
create table user_agreements(user_id int ,money int,index(user_id,money));
insert into user_agreements values(1,5000),(2,3000),(2,5000),(1,8000),(2,4500),(3,10000),(3,2500);

//例1
select user_id,count(money) as money,user_name
from user
inner join user_agreements using(user_id)
group by user_id;

//例2
select user_id,(select count(money) as money from user_agreements where user_id=t1.user_id) as money,user_name
from user as t1;

//例3
select user_id, money,user_name
from user as t1
inner join (select user_id,count(money) as money from user_agreements group by user_id) as t2
using(user_id);

例1と例2はほぼ同じ、例3は若干効率が悪いかもしれません

適正なインデックスがあれば特にスピードは変わらないと思いますが?

//元データ
create table user(user_id int,user_name varchar(20),index(user_id,user_name));
insert into user values(1,'aaa'),(2,'bbb'),(3,'ccc');
create table user_agreements(user_id int ,money int,index(user_id,money));
insert into user_agreements values(1,5000),(2,3000),(2,5000),(1,8000),(2,4500),(3,10000),(3,2500);

//例1
select user_id,count(money) as money,user_name
from user
inner join user_agreements us...続きを読む


人気Q&Aランキング

おすすめ情報