![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
予約明細テーブルと貸出明細テーブルの2つがあります。
この2つのテーブルから以下の項目を抽出するSQL文がわかりません
貸出先:予約明細と貸出明細のうち直近(システム日付からの)の貸出先
※予約明細と貸出明細には貸出期間開始日と貸出期間終了日があります。
貸出期間:上記明細の貸出期間(貸出先で抽出した貸出期間開始日、貸出期間終了日)
会場:予約明細の時のみ上記明細の会場
担当 上記明細の登録担当者
という項目を抽出するSQL文がわかりません
自分なりに考えた結果が以下のSQL文です。新人プログラマのため間違っていると思うので
ご指摘願います。
SELECT
貸出先,
貸出期間開始日~貸出期間終了日 AS 貸出期間,
会場,
担当
FROM 商品
LEFT JOIN 予約明細 ON 商品コード = 商品コード (商品テーブルと予約明細テーブルは商品コードで結合します)
LEFT JOIN 貸出明細 ON 商品コード = 商品コード (商品テーブルと貸出明細テーブルは商品コードで結合します)
WHERE
ここからがまったくわかりません。
SQL文だけでは抽出する事は不可能なのでしょうか
VB.netで開発しているのですがVB側で処理しなければいけない
項目もありますでしょうか
SQL文(とVB)のコードでのご回答宜しくお願いいたします。
環境
VB2005
SQLServer2005
A 回答 (4件)
- 最新から表示
- 回答順に表示
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_05.png?e8efa67)
No.4
- 回答日時:
No1、No2の方の言いたいことはわかる(苦笑)
酒飲んでいるし、SQL文自体使うDBMS依存なので的確なことは言えないがご参考までに。
(私のスタイルはSQL Server系で、かついちいち検証する気がないのでうろ覚えでの記載です。)
まず、あなたのSQL文では「商品」テーブルなるものが登場していますが、これはSELECTで抽出する列、WHERE句の条件に関わらないなら不要です。
また、LEFT JOINを使うかINNER JOINなのかも検索の条件次第で使い分けが必要です。
>貸出先:予約明細と貸出明細のうち直近(システム日付からの)の貸出先
>の仕様SQLがとくにわかりません
システム日付を取得する関数をGETDATE()としますと、この部分はまず直近の貸出期間終了日を検索するには以下のようになります。(貸出明細テーブルの貸出期間終了日が直近のものを直近の貸出先と仮定しています)
SELECT MAX(貸出期間終了日) FROM 貸出明細 WHERE 貸出期間終了日 <= GETDATE()
これで直近の貸出終了日を求めたなら、それに対応する貸出先は(貸出明細テーブルに貸出先フィールドがあると仮定しています)サブクエリーを使用して
SELECT 貸出先, 貸出期間終了日 FROM 貸出明細 WHERE 貸出期間終了日 = (SELECT MAX(貸出期間終了日) FROM 貸出明細 WHERE 貸出期間終了日 <= GETDATE())
※たぶんこんな感じだと思うが、自分で仕事でやるときはSQLを実際に試して検証するけれど、今ははしょっているので無保障です。
ここまでいけばあなたのSQLから類推すると、直近に貸し出した先の情報を取りたいようなので
(会場、担当は予約明細テーブルにあると仮定。貸出先、貸出期間終了日、商品コードは予約明細、貸出明細テーブルにあると仮定。期間を求める関数をDATEDIFF()とする)
SELECT 予約明細.貸出先, DATEDIFF(day, 予約明細.貸出期間開始日, 予約明細.貸出期間終了日) AS 貸出期間, 予約明細.会場, 予約明細.担当
FROM 予約明細 INNER JOIN 貸出明細 ON 予約明細.貸出先 = 貸出明細.貸出先 AND 予約明細.貸出期間終了日 = 貸出明細.貸出期間終了日 AND 予約明細.商品コード = 貸出明細.商品コード
INNER JOIN (SELECT 貸出先, 貸出期間終了日, 商品コード FROM 貸出明細 WHERE 貸出期間終了日 = (SELECT MAX(貸出期間終了日) FROM 貸出明細 WHERE 貸出期間終了日 <= GETDATE()) AS K ON 貸出明細.貸出先 = K.貸出先 AND 貸出明細.貸出期間終了日 = K.貸出期間終了日 AND 貸出明細.商品コード = K.商品コード
とこんな感じでサブクエリー使えば行けるんじゃないかと思ったが、自信はないです。
それと、商品テーブルを関与させるならSELECT文に商品コードや商品名も出すのだろうなと思います。
No.3
- 回答日時:
#1です。
あのね、「テーブル構造は社外秘ですから」は無いでしょ。
だれも構成をまんま書いてくれとは期待してませんよ。
デフォルメしてかまわない。結合・WHERE条件のモトネタがわからないとどうしようも無いから。
> 予約明細テーブルと貸出明細テーブルの2つがあります。
> この2つのテーブルから以下の項目を抽出するSQL文
と書きながら
> FROM 商品
3つ目のテーブルが登場してるし。
#2さんがズバリ指摘なさったが、仕様がわからないままでは誰も書けないよ。
上司or先輩の要求でSQL文書くなら、わからない点はその人に聞くしかないよ。
こういうサイトの使い方も含めてちゃんと相談してごらん。
もう一度書くけど、Selectする列はどのテーブルから取得するのか、整理してみて。
JOINしてる以上、何かしらのレコードは返るでしょ。
デフォルメで良いからテーブル構造を示さないと、WHERE条件をどうするか、考えようが無い。
「SQL文は発展途上だが、ACCESSならお任せあれ」だったら、ACCESSでODBCリンクテーブル作って
クエリで頑張ってごらん。望む結果が得られたら、デザインビュー>SQLビューで読めるから。
No.2
- 回答日時:
>仕様が難しくてSQL文が作れません
”仕様が難しい”のではなく、仕様が明確でないのです。
提示された仕様は明確であったかも知れませんが、質問内容に記載の内容は明確でありません。
ANo.1のお礼に書かれていましたが、「言ってることがよくわからない」のです。それは、理解に重要なキーワードが無いのです。裏返すと、仕様にキーワードが書かれていても、見逃しているのでしょう。
何がキーワードかを知るには、正しく動作している仕様書とそれで作成されたコードを照らし、消込みをしてみる事です。仕事を始めてどれほど立っているかわかりませんが、分からないことを聞くのが恥ずかしくて知ったような顔をしていると、ドンドン深みにハマッテしまいますよ。まずは、分からないことが何処にあるのかが言えなければ、聞いても教えてもらえません。地道に仕様書の文言とコードの対応を消込んで見てください。それがスラスラとできるようになれば、大丈夫です。
でも、この消込みが出来ないようであれば、この仕事は向かないのかも知れません。本来は身近の人に教えてもらえなければ、仕事になりませんよ。
頑張ってね。
No.1
- 回答日時:
テーブル[商品]・[予約明細]・[貸出明細]の構造は?
貸出期間は演算で算出できるような列構造?
select文に登場する列名に、テーブル名を加えて記述してみて。
商品テーブルの列[商品コード]だったら、 商品.商品コード のように。
詳細なテーブル仕様は社外秘のためここでは掲載できません
貸出先:予約明細と貸出明細のうち直近(システム日付からの)の貸出先
の仕様SQLがとくにわかりません
また貸出期間は
貸出期間開始日と貸出期間終了日から計算してもとめるわけではなく
仕様をみたす
貸出期間開始日~貸出期間終了日というふうに記述するものです
詳細なテーブル仕様を掲載できなくて申し訳けありません。
ここに掲載した仕様だけでSQL文を組んでいただけないでしょうか。
経験から推測してこうじゃないかという憶測も多少含まれていてもかまいません。
説明がうまくできなくて本当にもうしわけありません。会社でも言ってることが
よくわからないと先輩社員に怒られている日々です。
お忙しい中回答いただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Oracle SQL update方法 2 2022/06/22 14:07
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- 財務・会計・経理 簿記の商品のボックス図について 商品勘定のボックス図で写真のように金額の増加と減少理由が借方貸方それ 2 2022/04/07 23:44
- Amazon アマゾン 7 2022/06/11 11:03
- その他(データベース) accessについて 2 2022/05/31 16:58
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
キャバクラや風俗をクレカで支...
-
「内訳」と「明細」の違い
-
Accessサブレポートの内容が重...
-
クレジットカード明細にある「...
-
VISA国内利用vsカンタンケッサイサービス ...
-
新生銀行の振込手数料を帳簿上...
-
明細と詳細
-
アクセスにtxtファイルの指定行...
-
クレジットカード不正利用?
-
apple bill ってなんですか? 6...
-
【クリーニング店のレシート(明...
-
クレジット明細の利用箇所ANとは?
-
三井住友カードはメールで問い...
-
「d払いご利用可能額」とご利用...
-
身に覚えのない通話 請求
-
給与明細を渡してくれない
-
モバイルSuicaの明細
-
クレジットカード代金取り消し
-
Web明細の削除
-
仕様が難しくてSQL文が作れませ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
キャバクラや風俗をクレカで支...
-
「内訳」と「明細」の違い
-
クレジットカード明細にある「...
-
クレジットカードを見たらヤフ...
-
飲食店の会計明細について(ド...
-
VISA国内利用vsカンタンケッサイサービス ...
-
クレジットカード不正利用?
-
MUFGカードについて質問です。 ...
-
料金について
-
「d払いご利用可能額」とご利用...
-
dカードゴールドに変更して3ヶ...
-
Accessサブレポートの内容が重...
-
明細と詳細
-
自己破産申請したら全クレジッ...
-
【クリーニング店のレシート(明...
-
docomo.携帯請求書が急に届かな...
-
XMLをエクセルに取り込むマクロ
-
確定申告を自宅のパソコンでし...
-
三井住友カードはメールで問い...
-
2枚目の楽天カードVISAの明細を...
おすすめ情報