table項目:名称、日付、数量。
以上のtabelから以下のクエリーをつくりたいです:
クエリー項目:名称、当日数量、当月数量。
日付の値は、フォーム上で指定する。
具体的に:フォーム上日付欄に2003/10/01と2003/10/30を指定し、実行すると、当日数量は、2003/10/30その日の合計数が出る。当月数量に指定された10/01から10/30までの数字の合計がでる。
今、片方だけ条件のSQL文を書けるですが、二つ条件のSQL文がとても難しい。
そうゆうSQL文を教えていただけませんか?
よろしくお願いいたします。
No.10ベストアンサー
- 回答日時:
#5の回答のクエリが一発で求めるクエリなのですが、あいにく、accessでは、select ~ from (select ~) のように select文の入れ子が出来ないので、以下のようにクエリを2つに分割するしかありません。
まず、以下の当日数量ごと、当月数量ごとに集計するクエリを「Q1」として保存します。
--------------------------------------------------
select 名称, 0 as 当日数, sum(数量) as 当月数 from W where 日付 >= #2003/10/01# and 日付 <= #2003/10/31# group by 名称
UNION
select 名称, sum(数量) as 当日数, 0 as 当月数
from W where 日付 = #2003/10/15# group by 名称
UNION
select 名称, 0 as 当日数, 0 as 当月数
from W group by 名称;
--------------------------------------------------
上記クエリでは、
・当日に該当する数量の集計
・当月に該当する数量の集計
・すべての名称の一覧(当日、当月のどちらにも該当しない名称を0として出力させる)
の3つを生成します。
次に、当日数と当月数を1レコードにまとめる為の集計クエリを作ります。これが求めたい結果になります。
--------------------------------------------------
SELECT Q1.名称, Sum(Q1.当日数) AS 当日数量, Sum(Q1.当月数) AS 当月数量
FROM Q1
GROUP BY Q1.名称;
--------------------------------------------------
#9の回答のように、当日数と当月数をunionではなくjoinで繋いで集計する方法もありますが、クエリが3つになって複雑、当日も当月も0の名称の物が出ないので、あまりお勧め出来ません。
No.9
- 回答日時:
補足です。
他の方法としてクエリを2つ作って
JOINする方法もあります。
クエリ1
SELECT 名称, Sum(数量) AS 当日合計
FROM テーブル WHERE 日付 = 終了日
GROUP BY 名称
クエリ2
SELECT 名称, Sum(数量) AS 当月数量
FROM テーブル WHERE 日付 >= 開始日 And 日付 <= 終了日
GROUP BY 名称
クエリ1とクエリ2を名称でJOINします。
結合プロパティを
「'クエリ2' の全レコードと 'クエリ1' の同じ結合フィールドのレコードだけを含める。」
にすれば、UNIONを使う場合と同じ結果で、
「両方のテーブルの結合フィールドが同じ行だけを含める。」
「'クエリ2' の全レコードと 'クエリ3' の同じ結合フィールドのレコードだけを含める。」
にすると、終了日に発生している名称のみ結合されます。
もちろん、サブクエリを使って、
SELECT A.名称, A.当日合計, B.当月数量 FROM (
SELECT 名称, Sum(数量) AS 当日合計
FROM テーブル WHERE 日付 = 終了日
GROUP BY 名称
) AS A INNER JOIN (
SELECT 名称, Sum(数量) AS 当月数量
FROM テーブル WHERE 日付 >= 開始日 And 日付 <= 終了日
GROUP BY 名称
) AS B ON A.名称 = B.名称;
としても、いいでしょう。
ご回答をいただき、ありがとうございます。
この方法で、結果を出ました。
終了日に発生していない名称についての質問ですが:
(1)当日数量は、0で表示できるでしょうか?
(2)当月数量は、合計のまま。
(3)名称すべて表示される。
イメージとして:
=============================================
名称 当日数量 当月数量
---------------------------------------------
A 0 100
B 10 250
C 0 0
: :
: :
ご指導をお願いいたします。
:
No.8
- 回答日時:
もしかして、例文の"table"っていうテーブル名を
そのまま使ってます?
"table"は予約語なので無理やり使うとしたら、
"[table]"と記述しなければなりませんよ。
No.6
- 回答日時:
#1及び#2です。
そう言うことですか、でしたら残念ですが一つのSQLで両方の値を同時に取得する事は出来ません。
論理的に、出力されるデータの件数が違いますね。ですから同時には取り出せません。
別々に分けるしか方法はないでしょう。
SELECT SUM(数量) FROM table WHERE 日付>=開始日 AND 日付<=終了日
で当月数量をとり、
SELECT 日付,SUM(数量) FROM table WHERE 日付>=開始日 AND 日付<=終了日 GROUP BY 日付
で、日付ごとの数量が取得できます。
この回答への補足
3回目ご回答をいただき、ありがとうございます。
以上の結果をひとつクエリーで集計したいです。(帳票の元になる。二つクエリーになると、帳票を作成するときに、また苦しくなりそう。)
No.5
- 回答日時:
当日数量のサマリーが最終日だけでいいのであれば、
以下でいけると思いますよ。
select 名称, sum(AAA) as 当日数量, sum(BBB) as 当月数量 from (
select 名称, 0 as AAA, sum(数量) as BBB
from table where 日付 >= 開始日 and 日付 <= 終了日
group by 名称
union
select 名称, sum(数量) as AAA, 0 as BBB
from table where 日付 = 終了日 group by 名称
) group by 名称
※開始日、終了日はちゃんと日付で置き換えてくださいね。
ご回答ありがとうございます。
select 名称, 0 as AAA, sum(数量) as BBB
from table where 日付 >= 開始日 and 日付 <= 終了日 group by 名称 union select 名称, sum(数量) as AAA, 0 as BBB from table where 日付 = 終了日 group by 名称 group by 名称;
で数値を綺麗に集計しました。でも、頭の所に select 名称, sum(AAA) as 当日数量, sum(BBB) as 当月数量 from (以上文)を加えると、エラー(From構文のエラー)でました。原因がなんでしょうか?教えてください。
No.3
- 回答日時:
こんばんは。
あくまでもたとえばですが、サブセレクトしてこんな風にしてやることも出来ますよ。
select
distinct
(select
count(*)
from user
where Select_priv = 'N'
)
,
(select
count(*)
from user
where Select_priv = 'Y'
)
from user
******************
+------------------------------------------------------+------------------------------------------------------+
| 2 | 2 |
+------------------------------------------------------+------------------------------------------------------+
1 row in set (0.02 sec)
とりあえず、mysqlで試してみてあります。
VBってよくわからないので、まったく自信なしです。
No.2
- 回答日時:
いやぁ~、そのまんまですよ。
SELECT SUM(当日数量),SUM(当日数量) FROM table
WHERE 日付>=2003/10/01 AND 日付<=2003/10/30
でいいはずです。
この場合、日付でヒットするデータの当日数量と当月数量の合計が取得できます。もし他に条件があるのなら、考え直さなきゃいけませんけどね。
この回答への補足
すみません、こちらの説明が悪いですが。
元table: 名称、日付、数量 3項目しかないです。
作ってほしい項目は、名称、当日数量の合計、当月数量の合計。
教えてもらった方法で、当日数量の合計と当月数量の合計が同じ数字になる。
SELECT SUM(当日数量),SUM(当月数量) FROM table
WHERE 日付>=2003/10/01 AND 日付<=2003/10/30
だと、当月の数量の合計しか得られない。当日数量に対する制約条件は、ないです。
何回試したですが、当日数量の合計を得られませんでした。お願いいたします。
No.1
- 回答日時:
MS-ACCESSなら
SELECT SUM(当月数量) FROM table
WHERE 日付>=2003/10/01 AND 日付<=2003/10/30
か
SELECT SUM(当月数量) FROM table
WHERE 日付 BETWEEN 2003/10/01 AND 2003/10/30
と言う風にどちらでも出来ると思います。
この回答への補足
ご回答ありがとうございます。
当日数量と当月数量のSQL文を書けるですが、
SELECT SUM(当日数量) FROM table
WHERE 日付>=2003/10/01 AND 日付<=2003/10/30
SELECT SUM(当月数量) FROM table
WHERE 日付>=2003/10/01 AND 日付<=2003/10/30
ほしいSQL文:
SELECT SUM(当日数量),SUM(当日数量) FROM table ???
この二つ条件(当日数量と当月数量)を満たすSQLを書けないです。ご指導をお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- Access(アクセス) Access VBAで条件を追加する(書き込む)場所 2 2022/03/23 12:05
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
エクセルvba. PDF保存 フォルダ...
-
エクセルのVBAで日付を検索し転...
-
3人のじゃんけんのプログラム
-
週間カレンダー vbscript
-
Laravelクエリビルダにてウィン...
-
【Excel VBA】条件に合った行の...
-
VisualBasic6.0のFormat関数で...
-
VB.net 登録されている日付の連...
-
C++で日付判定を行いたい!!
-
htmlで日付表示。三日後の日付...
-
DataGridViewでyyyy/MM/dd
-
指定した日付が、その月の第何...
-
システム日付とは?
-
VB.NET 日付設定
-
1本あたり○円と表示する時どの...
-
JavaScriptで日付別のテキスト...
-
テキストボックスにカレンダー...
-
最近、iPhoneがおかしいです 私...
-
iPhoneの通知が何故か来なくな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
人をはめた人は 自分に返ってく...
-
DataGridViewでyyyy/MM/dd
-
エクセルのVBAで日付を検索し転...
-
ユーザーフォームのラベルに日...
-
VisualBasic6.0のFormat関数で...
-
コンボボックスに日付を表示する
-
テキストボックスにカレンダー...
-
1本あたり○円と表示する時どの...
-
指定した日付が、その月の第何...
-
VBAで当月の1日を表示するには...
-
VBA 日付・時刻の判別 時刻を認...
-
今日より前の書き方 マクロ
-
テキストボックスに今日の日付...
-
システム日付とは?
-
DateTimePickerを西暦表示にす...
-
JSPからYYYYMMDDで日付入力する
-
C++で日付判定を行いたい!!
-
ExcelVBAでSQLサーバの日付時刻...
-
VBでDate型の大小比較がうまく...
おすすめ情報
