アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (5件)

データベースはなんでしょう?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")

で、でてくるはずです。
    • good
    • 0
この回答へのお礼

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

では、SQLのステートメントが間違っているというエラーがでます。

お礼日時:2003/05/14 12:19

すむません。

抜けがありました。
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")
で集計できるはずですが…。
    • good
    • 0
この回答へのお礼

strDATE = Format(Now, "yyyy/mm/dd")

uriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, "yyyy/mm/dd") = Format(Now, "yyyy/mm/dd")"

これでも、ステートメントのエラーが発生します・・・
使用しているのはアクセスなので、大丈夫だと思っているのですが・・・

お礼日時:2003/05/14 12:47

う~~~む。



SQL文そのものは、正しいです。間違っていません。

SQL文を発行するときの、オープンの仕方が違っているのかもしれませんね。

教えていただけますか?できれば、Set文から以降全部です…。
    • good
    • 0
この回答へのお礼

何度もありがとうございます。
関係あると思われる部分を以下に記述します。どうぞよろしくお願いします。
******************************************
'日付を文字列として取得する()
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
******************************************

お礼日時:2003/05/14 13:34

こんにちは。



これでテストしてみてください。
UriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, 'yyyy/mm/dd') = Format(Now, 'yyyy/mm/dd')"

VBAではうまく出来たのでVBでもできると思いますが、全く自信ありません。

ではでは・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/05/14 15:00

たぶん、


UriageSQL = "SELECT SUM(売上額) AS 売上額 FROM 売上 WHERE Format(売上日, " & chr(34) & "yyyy/mm/dd" & chr(34) &") = Format(Now, " & chr(34) & "yyyy/mm/dd" & chr(34) & ")"

ですね。文字列のダブルクォートのせいかも。
    • good
    • 0
この回答へのお礼

なかなかうまくいかなかったのですが・・
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のどこかで情報提供しますね!!

お礼日時:2003/05/14 15:41

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

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