指定された日付とマッチングした日付のレコードを取得するには?
おはようございます。
質問なのですが、VBのフォームで、ラベルに現在時刻と日付を表示させています。表示された日付をもとに、データベースから同じ日のレコードを合計し、その合計した数値を取得したいと思います。この場合、どのようにSQLで記述すればよいのでしょうか?
具体的には、客別の売上げ額を日付ごとに集計し、総合計を算出プログラムにしたいと思っています。
そして、現在はDataEnvironmentを使用して作成しています。
回答(5件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
たぶん、
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のどこかで情報提供しますね!!
No.4ベストアンサー10pt
こんにちは。
これでテストしてみてください。
UriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, 'yyyy/mm/dd') = Format(Now, 'yyyy/mm/dd')"
VBAではうまく出来たのでVBでもできると思いますが、全く自信ありません。
ではでは・・・
この回答へのお礼
う~む・・・
なぜか、うまくいきません(TT)
別の手法を試しています。
すみません。
う~~~む。
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
******************************************
No.2ベストアンサー20pt
すむません。抜けがありました。
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")
で集計できるはずですが…。
この回答へのお礼
strDATE = Format(Now, "yyyy/mm/dd")
uriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, "yyyy/mm/dd") = Format(Now, "yyyy/mm/dd")"
これでも、ステートメントのエラーが発生します・・・
使用しているのはアクセスなので、大丈夫だと思っているのですが・・・
データベースはなんでしょう?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のステートメントが間違っているというエラーがでます。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











