• ベストアンサー

指定された日付とマッチングした日付のレコードを取得するには?

おはようございます。  質問なのですが、VBのフォームで、ラベルに現在時刻と日付を表示させています。表示された日付をもとに、データベースから同じ日のレコードを合計し、その合計した数値を取得したいと思います。この場合、どのようにSQLで記述すればよいのでしょうか?    具体的には、客別の売上げ額を日付ごとに集計し、総合計を算出プログラムにしたいと思っています。  そして、現在はDataEnvironmentを使用して作成しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.2

すむません。抜けがありました。 SELECT 顧客ID,購入日付,SUM(金額) AS 購入金額 FROM 売上 WHERE FORMAT(購入日付, "YYYYMMDD") BETWEEN FORMAT(開始日付, "YYYYMMDD") AND FORMAT(終了日付, "YYYYMMDD") GRUOP BY 顧客ID,購入日付 でした。「GRUOP BY 顧客ID,購入日付」が抜けてました。 >FORMATはSQL内でも使用可能でしょうか? DBがアクセスなら使えます。 >UriageSQL = "SELECT Sum(売上額) as 売上額 FROM 売上 WHERE 売上日=" & "#" & strDATE & "#" でエラーとなるのは、売上日と条件設定が合ってないじゃないかと思いますが? 売上日は日付タイプの項目でしょうか?日付項目なら、SELECT SUM(金額) AS 購入金額 FROM 売上 WHERE FORMAT(購入日付, "YYYYMMDD") = FORMAT(現在日付, "YYYYMMDD") で集計できるはずですが…。

noname#47454
質問者

お礼

strDATE = Format(Now, "yyyy/mm/dd") uriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, "yyyy/mm/dd") = Format(Now, "yyyy/mm/dd")" これでも、ステートメントのエラーが発生します・・・ 使用しているのはアクセスなので、大丈夫だと思っているのですが・・・

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.5

たぶん、 UriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, " & chr(34) & "yyyy/mm/dd" & chr(34) &") = Format(Now, " & chr(34) & "yyyy/mm/dd" & chr(34) & ")" ですね。文字列のダブルクォートのせいかも。

noname#47454
質問者

お礼

なかなかうまくいかなかったのですが・・ SQLから離れて、このように記述するとできましたよ!!参考までに以下にコードを記述しておきます。今回は大変ありがとうございました。次こそはSQLで書きたいものですが・・・(^^;) ************************************* データベースで売上総額をクエリで作成(SELECT 売上額 GROUP BY売上日) strDATE = "2003/05/09" '日付を固定してみました。 'レコードセットを取得 rs.Open "売上総額", cn, adOpenStatic, adLockOptimistic '指定した日付を見つけるまでループ Dim blnFlag As Boolean blnFlag = False Do Until blnFlag = True If rs.EOF = True Then blnFlag = True MsgBox "指定した日付がみつかりません" ElseIf rs!売上日 = strDATE Then blnFlag = True lblSouUriage.Caption = rs!売上総額 Else rs.MoveNext End If Loop End Sub ************************************* このようにしましたら、何とか売上総額が表示されるようになりました。また問題解決の糸口が見つかりましたら、gooのどこかで情報提供しますね!!

全文を見る
すると、全ての回答が全文表示されます。
  • paz777
  • ベストアンサー率47% (77/163)
回答No.4

こんにちは。 これでテストしてみてください。 UriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, 'yyyy/mm/dd') = Format(Now, 'yyyy/mm/dd')" VBAではうまく出来たのでVBでもできると思いますが、全く自信ありません。 ではでは・・・

noname#47454
質問者

お礼

う~む・・・ なぜか、うまくいきません(TT) 別の手法を試しています。 すみません。

全文を見る
すると、全ての回答が全文表示されます。
  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.3

う~~~む。 SQL文そのものは、正しいです。間違っていません。 SQL文を発行するときの、オープンの仕方が違っているのかもしれませんね。 教えていただけますか?できれば、Set文から以降全部です…。

noname#47454
質問者

お礼

何度もありがとうございます。 関係あると思われる部分を以下に記述します。どうぞよろしくお願いします。 ****************************************** '日付を文字列として取得する() strDATE = Format(Now, "yyyy/mm/dd") UriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, "yyyy/mm/dd") = Format(Now, "yyyy/mm/dd")" 'レコードセットを取得 rs.Open "UriageSQL", cn, adOpenStatic, adLockOptimistic '連結 Set lblSouUriage.DataSource = rs End Sub Private Sub Form_Load() '接続 cn.ConnectionString = "provider=Microsoft.jet.OLEDB.4.0;" _ & "data source =C:\Documents and Settings\r76427.RSOA\My Documents\My eBooks\r76427\Seisan\myDB\PosSystemDB.mdb" cn.Open End Sub Private Sub Form_Unload(Cancel As Integer) cn.Close End Sub Private Sub Timer1_Timer() lblTime.Caption = Now ' 日付と時間を返す End Sub ******************************************

全文を見る
すると、全ての回答が全文表示されます。
  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

データベースはなんでしょう?Accessを前提にすると。 一日だけの集計なら SELECT SUM(金額) AS 購入金額 FROM 売上 WHERE 顧客ID = お客様ID AND FORMAT(購入日付, "YYYYMMDD") = FORMAT(現在日付, "YYYYMMDD") 顧客IDと購入日付は売上テーブルに設定されてるものとします。 お客様IDと現在日付はフォームから取得するものとします。 一覧形式で日付ごとに集計するのなら、 SELECT 顧客ID,購入日付,SUM(金額) AS 購入金額 FROM 売上 WHERE FORMAT(購入日付, "YYYYMMDD") BETWEEN FORMAT(開始日付, "YYYYMMDD") AND FORMAT(終了日付, "YYYYMMDD") で、でてくるはずです。

noname#47454
質問者

お礼

ありがとうございます。VBで取得した日付をSELECT文でどう条件として組み込むかが・・・ FORMATはSQL内でも使用可能でしょうか? 現在も頭を悩ませ中です。 UriageSQL = "SELECT Sum(売上額) as 売上額 FROM 売上 WHERE 売上日=" & "#" & strDATE & "#" では、SQLのステートメントが間違っているというエラーがでます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Access クエリで、レコードの無い日付も出力したい

    売上テーブル 日付   名前 金額 2007/01/01 A 100 2007/01/02 B 200 2007/01/05 C 500 2007/01/05 A 500 希望するクエリ結果 日付  件数 売上高 2007/01/01 1 100 2007/01/02 1 200 2007/01/03 0  0 << これを表示したい 2007/01/04 0  0 << これを表示したい 2007/01/05 2 1000 売上.日付 でグループ化すると、レコードの無い日付が表示されません。 集計期間内の全日付が表示されるようにするには、どうすればよいのでしょうか? 別に日付テーブルを作らなければならないのでしょうか?

  • 他のPCの日付・時刻の取得

    複数台のPCからAccessデータベースに 接続して書き込むプログラムをVBで作成していますが 共通の日付時刻を取得したいのですが可能でしょうか? 1.データベース(Access2000)で日付を取得 2・データベースファイルがあるPCの日付時刻を取得 データベースに日付をもっているとは思えないので「2」の方法に なると思うのですが、、どちらでも構いませんし別の方法があれば 教えて下さい。 VB6 SP5 ACCESS 2000(ADO2.5,DAO3.6)

  • レコードセットからレコードセットって作れますか?

    WindowsXP,VB6,SP5,で開発しています。 タイトルそのままなのですが、 ある事情で、まずはデータベース(Access)からレコードセットを作成しています。 そのレコードセットをもとに色々と抽出したいんです。 もし、データベースからSQL文で抽出するときみたいに、そのレコードセットを、 SUM(~とかGROUP化したりとかできればいいなあと思っているのですが、 その方法がわからず、2,3回遠回りしてレコードセットを作成してます。 レコードセットからレコードセットを作成することってできないのでしょうか? わかりにくくてすみませんが、どうぞよろしくお願いしますm(_ _)m

  • エクセルの日付を範囲指定して振り分けたい

    エクセル2013を使用しています。 以下の様なデータがあるのですが、分析するために任意の日付毎に集計して振り分けたいのですがどのようにすれば良いでしょうか? 有効期限 2014/11/13 2014/12/27 2015/1/8 2014/12/29 2015/1/20 2014/12/28 2015/2/21 2015/3/21 やりたいのはこんなイメージです。 2014/11 2014/12 2015/1 2015/2 のように月単位に集計(あるいは半月ごとに集計→11月上旬、11月下旬、12月上旬等)したいです。 上記のように振り分けた後に、11月の人数合計や売上合計を集計等したいのですが。 関数等あまり詳しくないのですが、アドバイスいただけると助かります。

  • Access2000 / 「レコードを追加できません」

    こんにちは Access2000で困っております。 簡単にいいますと、フォーム上から日付/時刻型のデータを入力しようとしても 「レコードを追加できません、テーブル’T外部集計警備’の結合キーがレコードセットにありません。」と表示されうまく入りません。 テーブルの構成ですが、 ★が主キー (1)T現場台帳 ★NO(オートナンバー型) 現場記号(テキスト型) ・ ・ 省略 (2)T外部集計警備 ★NO(オートナンバー型) 現場記号(テキスト型) 警備依頼日付(日付/時刻型) 警備会社ID(数値型) 集計人数(数値型) (3)T警備会社 ★警備会社ID 警備会社名(テキスト型) ・ ・ 省略 上記テーブルはリレーションがかかっており、 (1)T現場台帳.現場記号(テキスト型)----(2)T外部集計警備.現場記号(テキスト型) (2)T外部集計警備.警備会社ID(数値型)---(3)T警備会社.★警備会社ID それぞれ、参照整合性のついたリレーションです。 更にこれらをまとめるために、Q警備会社集計クエリ(選択クエリ)をつくりフォームに利用しています。 Q警備会社集計クエリの構成 T現場台帳.担当者ID T外部集計警備.警備依頼日付 T外部集計経緯日.警備会社ID T警備会社.警備会社名 T外部集計警備.集計人数 (並べ替えや絞込みは、なし) この「Q警備会社集計クエリ」を使って フォームからウイザードを使用してフォームを作成し、警備依頼日付を入力しようとすると「レコードを追加できません、テーブル’T外部集計警備’の結合キーがレコードセットにありません。」と表示されます。 どなたか、Accessの痒いところまで手の届く方、お助けください。

  • Accessでクエリに演算を加えたら新規レコードがでなくなった。

    Accessでフォームを作成して後にクエリに演算を加えたら、サブフォームに新規レコードが出なくなり入力機能がなくなってしまったのですが、どうしてでしょう? クエリでは[売上小計]と[仕入小計]と[粗利]を計算するため集計を演算にしないとフォームで合計が#エラ-になってしまうので、演算にしたところなくなってしまい復活しません。

  • VB.netでmdbのレコードを取得

    VB.netからAccessで作成したデータベースのレコードを 取得するプログラムを作りたいと考えています。 ですが、データベースを操作するプログラムは初めてですので、 どうもイメージがわきません。 やりたいことは、 1.VBからmdbにアクセス(DAO) 2.SELECTでレコードを取得 3.取得したレコードから必要なフィールドをテキストボックに表示 上記の処理が可能であれば、コーディングのヒントを頂けないでしょうか? よろしくお願いします --- OS:Windows Vista 開発環境:VS2005 pro

  • レコードセットを保留中にするには?

    WINDOWSXP,VB6,SP5で開発しています。 レコードセットにデータをどんどん追加して、 最後にまとめてデータベースに追加する。 みたいなことしたいのですが、可能なのでしょうか? ちなみに、サーバはSQL使ってます。

  • 指定日付から90日後の日付を算出するには

    Perlの質問です。 登録日 2006/1/1 2006/2/10 2006/2/20 2006/3/15 の様なテキストファイルがあります。 このファイルを読み込んで、各レコードの値ごとに この登録日より90日後の日付を算出したいのですが、どのようなコードになるのでしょう。 ちなみに現在から何日後の日付を出すというサンプルは見つけました。 http://www.aimix.jp/cgi/accdatecnt.html しかしこれはtimeで現在日時を取り出して、それに何日間を秒単位にして加算するということなので、理屈はわかるのですが、いまいち今回のやりたいことに結び付けれません。 timeが1970年1月1日 00:00:00 から現在までの秒数を算出する関数ですから このように、先のリストの例でいうと、2006/1/1 00:00:00は、1970年1月1日 00:00:00 から何秒目なのかを算出できればなんとか出来そうなんですが・・・

    • ベストアンサー
    • CGI
  • フィールドの非表示

    frm1というフォームに表示すると表示しないというオプションボタンがあり 表示しない方のボタンをオンにすると TDBGridの合計のフィールドは表示しないようにしたいのですが またデータベースへ登録するときは "なし"と登録したいのですが こんなのVBで出来ますでしょうか? 教えてください。 VB6.0 SQL Serverです。 よろしくお願いします。