Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1325 / 2272 ツリー ←次へ | 前へ→

【7692】JOIN書き方について タロ 06/4/14(金) 11:25 質問[未読]
【7694】Re:JOIN書き方について 小僧 06/4/14(金) 14:21 発言[未読]
【7696】Re:JOIN書き方について タロ 06/4/14(金) 15:00 発言[未読]
【7697】Re:JOIN書き方について 小僧 06/4/14(金) 15:47 回答[未読]
【7699】Re:JOIN書き方について タロ 06/4/17(月) 9:19 お礼[未読]

【7692】JOIN書き方について
質問  タロ  - 06/4/14(金) 11:25 -

引用なし
パスワード
   AccessでのJOINの書き方について質問です。

種類テーブル:種類_T(ホテルや電車等をまとめたテーブル)
ホテルテーブル:ホテルT(ホテル情報のテーブル)
電車テーブル:電車T(電車情報のテーブル)

テーブル:種類_T
 予約番号 種別 ・・・
 1     2
 1     3

SQLServerでは、
SELECT
    種類_T.予約番号,
    ホテルT.ホテル名,
    電車T.交通費,
    種類_T.種別
FROM 種類_T
    LEFT OUTER JOIN ホテルT ON
        ホテルT.予約番号 = 種類_T.予約番号
        AND 種類_T.種別 = 2
    LEFT OUTER JOIN 電車T ON
        電車T.予約番号 = 種類_T.予約番号
        AND 電車T.種別 = 3
で、問題ないのですが、クエリではどのように書けば良いのでしょうか?
「AND 種類_T.種別 = 」の箇所が出来ません。
宜しくお願い致します。

【7694】Re:JOIN書き方について
発言  小僧  - 06/4/14(金) 14:21 -

引用なし
パスワード
   ▼タロ さん:
こんにちは。

>AccessでのJOINの書き方について質問です。

SQL文からだけで判断しているので外しているかもしれませんが、


SELECT 種類_T.予約番号,
    ホテルT.ホテル名,
    電車T.交通費,
    種類_T.種別
FROM (種類_T
   LEFT JOIN ホテルT ON 種類_T.予約番号 = ホテルT.予約番号)
      LEFT JOIN 電車T ON 種類_T.予約番号 = 電車T.予約番号
WHERE 種類_T.種別=3

という様な事でしょうか。

【7696】Re:JOIN書き方について
発言  タロ  - 06/4/14(金) 15:00 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。

説明不足で申し訳ありません。
テーブル:種類_T
 予約番号 種別 ・・・
 1     2
 1     3
 2     2
 3     3
テーブル:ホテル_T
 予約番号 ホテル名 ・・・
 1     ホテルA
 2     ホテルB
テーブル:電車_T
 予約番号 交通費 ・・・
 1    300
 3    1200

仮に上記のようなテーブルの中身の場合、
予約番号 種別 ホテル名 交通費
1    2   ホテルA
1    3        300
2    2   ホテルB
3    3        1200
のようにデータにしたいのです。
WHERE 種類_T.種別=3としてしまうと
電車のみの結果になってしまいますよね。

【7697】Re:JOIN書き方について
回答  小僧  - 06/4/14(金) 15:47 -

引用なし
パスワード
   ▼タロ さん:
こんにちは。

>予約番号 種別 ホテル名 交通費
>1    2   ホテルA
>1    3        300
>2    2   ホテルB
>3    3        1200
>のようにデータにしたいのです。

クエリとして不可能な訳ではありませんが、
データの持ち方としては余り良くないですよね。

A) ユニオンクエリを使う方法

SELECT P.予約番号, P.種別, P.ホテル名, P.交通費
FROM [
SELECT 種類_T.予約番号,種類_T.種別, ホテルT.ホテル名, '' AS 交通費
FROM 種類_T LEFT JOIN ホテルT ON 種類_T.予約番号 = ホテルT.予約番号
WHERE 種類_T.種別=2
UNION ALL
SELECT 種類_T.予約番号, 種類_T.種別, '' AS ホテル名, 電車T.交通費
FROM 種類_T INNER JOIN 電車T ON 種類_T.予約番号 = 電車T.予約番号
WHERE 種類_T.種別=3
]. AS P
ORDER BY P.予約番号, P.種別;


B) IIF関数を使う方法

SELECT 種類_T.予約番号,
    種類_T.種別,
    IIf([種別]=2,[ホテルT].[ホテル名],Null) AS ホテル名,
    IIf([種別]=3,[電車T].[交通費],Null) AS 交通費
FROM (種類_T
   LEFT JOIN 電車T ON 種類_T.予約番号 = 電車T.予約番号)
   LEFT JOIN ホテルT ON 種類_T.予約番号 = ホテルT.予約番号
ORDER BY 種類_T.予約番号, 種類_T.種別;

【7699】Re:JOIN書き方について
お礼  タロ  - 06/4/17(月) 9:19 -

引用なし
パスワード
   データの仕様は変更できないので、
B) IIF関数を使う方法で対処していきます。
ありがとうございました。

1325 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free