- ベストアンサー
指定された日付とマッチングした日付のレコードを取得するには?
おはようございます。 質問なのですが、VBのフォームで、ラベルに現在時刻と日付を表示させています。表示された日付をもとに、データベースから同じ日のレコードを合計し、その合計した数値を取得したいと思います。この場合、どのようにSQLで記述すればよいのでしょうか? 具体的には、客別の売上げ額を日付ごとに集計し、総合計を算出プログラムにしたいと思っています。 そして、現在はDataEnvironmentを使用して作成しています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
すむません。抜けがありました。 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") で集計できるはずですが…。
その他の回答 (4)
- PAPA0427
- ベストアンサー率22% (559/2488)
たぶん、 UriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, " & chr(34) & "yyyy/mm/dd" & chr(34) &") = Format(Now, " & chr(34) & "yyyy/mm/dd" & chr(34) & ")" ですね。文字列のダブルクォートのせいかも。
お礼
なかなかうまくいかなかったのですが・・ 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)
こんにちは。 これでテストしてみてください。 UriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, 'yyyy/mm/dd') = Format(Now, 'yyyy/mm/dd')" VBAではうまく出来たのでVBでもできると思いますが、全く自信ありません。 ではでは・・・
お礼
う~む・・・ なぜか、うまくいきません(TT) 別の手法を試しています。 すみません。
- PAPA0427
- ベストアンサー率22% (559/2488)
う~~~む。 SQL文そのものは、正しいです。間違っていません。 SQL文を発行するときの、オープンの仕方が違っているのかもしれませんね。 教えていただけますか?できれば、Set文から以降全部です…。
お礼
何度もありがとうございます。 関係あると思われる部分を以下に記述します。どうぞよろしくお願いします。 ****************************************** '日付を文字列として取得する() 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)
データベースはなんでしょう?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") で、でてくるはずです。
お礼
ありがとうございます。VBで取得した日付をSELECT文でどう条件として組み込むかが・・・ FORMATはSQL内でも使用可能でしょうか? 現在も頭を悩ませ中です。 UriageSQL = "SELECT Sum(売上額) as 売上額 FROM 売上 WHERE 売上日=" & "#" & strDATE & "#" では、SQLのステートメントが間違っているというエラーがでます。
お礼
strDATE = Format(Now, "yyyy/mm/dd") uriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, "yyyy/mm/dd") = Format(Now, "yyyy/mm/dd")" これでも、ステートメントのエラーが発生します・・・ 使用しているのはアクセスなので、大丈夫だと思っているのですが・・・