こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLを教えてください。

Access2000で、簡単なデータベースを作っています。
以下のような処理をする場合どうすればよいか教えてください。自分で書いたSQL文では結果は一行も返ってきませんでした。

「3台の車輌があり、それぞれに仕事をし量を記録しています。車輌の部品交換についても記録します。前回の特定の交換内容「AAA交換」の交換日から現在までいくら仕事をしたか、その間の量の累計を、車輌ごとに知りたい。(量によってAAAを交換するかどうか決める(オイル交換みたいな感じ)」

*実績明細テーブル*
実績コード(主キー) 作業日 車輌コード(外部キー) 打設数量

*交換記録テーブル*
交換コード(主キー) 交換日 交換内容 車輌コード(外部キー) 社員コード(外部キー)

*車輌テーブル*
車輌コード(主キー) 車番・・

*社員テーブル*
社員コード(主キー) 名前・・

作業日と、交換日は同じ日付になることはほとんどありません(車輌があく時にメンテをするので)
他の方の質問の仕方を参考に書いてみましたが、補足したほうが良いことがあれば補足します。よろしくお願いします。

投稿日時 - 2004-03-05 16:33:33

QNo.797726

暇なときに回答ください

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

あのう、ASAHI-yukiさんが書かれたSQL、括弧の数がおかしいんですけど・・・

あと、どうしてselectでとってくる項目に「打設数量」そのものがあるのですか?
合計をとってきたい値なんですよね?

で、「交換内容」がどこにもないのはどうして?

もしかして私が勝手にASAHI-yukiさんの質問を適当に解釈して回答してました?

※ちなみに#3で書いたSQL、交換内容毎に全部出てきます。

投稿日時 - 2004-03-06 14:16:45

お礼

回答ありがとうございます。お恥ずかしい話ですが、書いたSQLは、2週間前くらいにSQL文について勉強し始めたときのものでありまして・・。書いていただいたSQLで求めたい内容がバッチリ出てきました。

ご回答を頂いてから、この週末SQL文について勉強しました。まず、最新交換日を求めるSQLを書き、置いておき、新たに打設数量の合計を求めるSQLを書き、そこに最新交換日SQLを代入するという形で順にすすめて行き、完成しました。だいたい書いていただいたSQLと同じで嬉しかったです。本当にご親切にありがとうございました。また、よろしくお願いします。

投稿日時 - 2004-03-09 12:00:20

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

肝心な抽出条件間違えちゃいました(^^;;

select
実績明細テーブル.車輌コード,
最新交換記録.交換内容,
sum(打設数量) as 数量合計
from
実績明細テーブル, (select 車輌コード, 交換内容, max(交換日) as 最新交換日
from 交換記録テーブル
group by 車輌コード, 交換内容) as 最新交換記録
where 実績明細テーブル.車輌コード = 最新交換記録.車輌コード
and 作業日 >= 最新交換日
group by 実績明細テーブル.車輌コード, 最新交換記録.交換内容;

投稿日時 - 2004-03-05 18:00:18

ANo.2

こんな感じかな?

select
実績明細テーブル.車輌コード,
最新交換記録.交換内容,
sum(打設数量) as 数量合計
from
実績明細テーブル, (select 車輌コード, 交換内容, max(交換日)
from 交換記録テーブル
group by 車輌コード, 交換内容) as 最新交換記録
where
実績明細テーブル.車輌コード = 最新交換記録.車輌コード
group by 実績明細テーブル.車輌コード, 最新交換記録.交換内容;

#インラインクエリー(from句の中でselectの結果を選択クエリーのように使用)使ってます。


#難しいSQLが書けないから質問しているような・・・

投稿日時 - 2004-03-05 17:16:13

ANo.1

自分で書かれたSQL文も教えてください。

投稿日時 - 2004-03-05 16:36:36

補足

SELECT 車輌コード,作業日,打設数量
   ,(Select Sum(打設数量) From 実績明細テーブル) As Q
WHERE Q.車輌コード=T.車輌コード
AND Q.作業日<=T.作業日
AND Q.作業日>(Select Max(交換日) From 交換記録テーブル As M
Where M.車輌コード=T.車輌コード) ) As 合計数量
FROM 実績明細テーブル As T
WHERE 作業日>(Select Max(交換日) From 交換記録テーブル As S
Where S.車輌コード=T.車輌コード)
ORDER BY 車輌コード,作業日;

投稿日時 - 2004-03-06 11:40:02

あなたにオススメの質問