

お世話になります。教えてください。
以下の3つのテーブルがあります。
1)ベーステーブル
場所 | かな | 種類
--------------------------
王子 | あ | 水
王子 | い | 紙
仙台 | あ | 紙
青森 | あ | 鳥
青森 | あ | 水
秋田 | い | 鳥
秋田 | あ | 紙
秋田 | い | 水
2)かなテーブル
番号 | かな
-------------------
1 | い
2 | あ
3)種類テーブル
番号 | 種類
----------------
1 | 紙
2 | 木
3 | 水
4 | 鳥
で、結果としては
場所 | かな | 種類
--------------------------
王子 | い | 紙
仙台 | あ | 紙
青森 | あ | 水
秋田 | い | 水
つまり
同じ「場所」で「あ」と「い」があれば「い」を優先して場所を抽出し
その中で い>上>木>水>鳥、 あ>上>木>水>鳥 という条件にて
抽出すると上記のような結果になると思いますが、その方法がわかりません。
sqlで書かれても正直わかりませんので、アクセスについているクエリで
できないでしょうか?
どのようにしても結果が出てきません。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
> ちなみに上記をsqlにて記述するとどのようにになる
> のでしょうか?
場所 |優先 |番1 | かな |番2 | 種類
-------------------------------------------------
王子 |23 |2 | あ |3 | 水
王子 |11 |1 | い |1 | 紙
仙台 |21 |2 | あ |1 | 紙
青森 |24 |2 | あ |4 | 鳥
青森 |23 |2 | あ |3 | 水
秋田 |14 |1 | い |4 | 鳥
秋田 |21 |2 | あ |1 | 紙
秋田 |13 |1 | い |3 | 水
これは、サブクエリを使用しているわけではなく通常のデザインビューで作成できます。
SQL文では、
SELECT
ベーステーブル.*,
[かなテーブル]![番号]*10+[種類テーブル]![番号] AS 優先,
かなテーブル.番号 AS 番1,
種類テーブル.番号 AS 番2
FROM
(ベーステーブル INNER JOIN かなテーブル ON
ベーステーブル.かな = かなテーブル.かな)
INNER JOIN 種類テーブル ON
ベーステーブル.種類 = 種類テーブル.種類;
で、作成できます。
理解しやすいかなと、余分な処理は入れてあります。
サブクエリで1つで出てくるようにすると、
SELECT
ベーステーブル.*
FROM
(ベーステーブル INNER JOIN かなテーブル ON
ベーステーブル.かな = かなテーブル.かな)
INNER JOIN 種類テーブル ON
ベーステーブル.種類 = 種類テーブル.種類
WHERE
(かなテーブル!番号*10+種類テーブル!番号)
=(SELECT
Min(Subかなテーブル!番号*10+Sub種類テーブル!番号) AS 優先
FROM
(ベーステーブル AS Subベーステーブル
INNER JOIN かなテーブル AS Subかなテーブル ON
Subベーステーブル.かな = Subかなテーブル.かな)
INNER JOIN 種類テーブル AS Sub種類テーブル ON
Subベーステーブル.種類 = Sub種類テーブル.種類
GROUP BY
Subベーステーブル.場所
HAVING
(Subベーステーブル.場所= [ベーステーブル]![場所] )
)));
で、1つサブクエリを条件に書いた場合の例です。
他にも方法がありますけど、思いつくSQL文でこれを含めて3通りかな?
追伸
私も、いきなりSQL文を打ち込んでいるわけではなく、デザインビューで作成、SQLビューでコピー&ペーストで貼り付けて作成仕上げてます。
多重にクエリーを動作させているものは、最終的にはサブクエリを使用すれば、どれも1クエリに変更は可能ですが、編集しなおす時(仕様変更時)に大変になりますので多重のまま、使用された方が訂正は簡単です。
No.3
- 回答日時:
#1です。
できました?
いっぺんにというのは難しいと思いますよ。
でちょっと気になったのは、#2の方への返答で、
>ちなみに上記をsqlにて記述するとどのようにになるのでしょうか?
とありましたが、SQLビューはご存知ないですか?
クエリーのデザインビューで、クエリーウィンドウのタイトルバーを右クリックしてSQLビュー選べば出てきます。
いろいろ組み合わせてみて、どのようなSQL文になるか見てみると勉強になりますよ。
No.2
- 回答日時:
横から失礼します。
サブクエリを使用すれば1つで出来そうですが、SQL文が理解できないと言うことで、段階を追っているのだと思うのですが・・・。
私の方も、とりあえずの解決例^^;
場所 |優先 |番1 | かな |番2 | 種類
-------------------------------------------------
王子 |23 |2 | あ |3 | 水
王子 |11 |1 | い |1 | 紙
仙台 |21 |2 | あ |1 | 紙
青森 |24 |2 | あ |4 | 鳥
青森 |23 |2 | あ |3 | 水
秋田 |14 |1 | い |4 | 鳥
秋田 |21 |2 | あ |1 | 紙
秋田 |13 |1 | い |3 | 水
優先:[かな].[番号]*10+[種類].[番号]
番1:[かな].[番号]
番2:[種類].[番号]
と言うクエリを作成し、優先の最小値を取得、表示のし直しで出来ると思います。
で、10にしてあるところを適当に数値を増やせば、ある程度レコード数が増えても対処可能だと思いますが・・・。
書いている意味、理解可能ですか?
ありがとうございます。
えーと、sqlについてはまったくわからないというほどではありません。(笑)
ただサブクエリって使ったことないので・・・
ちなみに上記をsqlにて記述するとどのようにになるのでしょうか?
チャレンジしてみたいので教えていただけますか?
おっしゃっている意味は少しは理解できてると思います。
No.1
- 回答日時:
とりあえず、思いつくままに書いていくので、もっと効率のいい方法があるかもしれません。
第1段階:
(1)ベーステーブルと、かなテーブルをかなで結合
結合プロパティは、ベーステーブルが全レコード。
(2)出力するフィールドは、ベーステーブルの場所とかなテーブルの番号。
(3)グループ化(ツールバーのΣボタン)
(4)「番号」フィールドの「集計」欄を「グループ化」から「最小」に変更
(5)このクエリを保存(便宜上クエリ1とします)
第2段階:
(1)クエリ1とかなテーブルを番号で結合。(プロパティは両方)
(2)クエリ1の「場所」とかなテーブルの「かな」を出力フィールドにする。
(3)このクエリを保存(クエリ2)。
ちなみにこのクエリを実行すると以下のテーブルが得られるはずです。
場所 | かな
--------------
王子 | い
仙台 | あ
青森 | あ
秋田 | い
第3段階:
(1)ベーステーブルとクエリ2を、場所とかなで結合(両方)
(2)ベーステーブルの全フィールドを出力フィールドにする。
あとは同じようなことをかなテーブルを種類テーブルにおきかえてもう一回繰り返すだけなので、できると思いますが、わからなければまた質問してください。
早速のご回答ありがとうございます。
やはり数回に分けてやらなければならないのですかね。
とりあえずやってみます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- 電車・路線・地下鉄 東京から東北一周したい 8 2023/06/23 15:31
- 新幹線 【鉄道】全国にある新幹線の駅の格付けランキングを作ってみました!皆様のご意見をよろしくお願いします。 1 2023/02/11 16:42
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- カラオケ 皆さんはカラオケでどのような歌手の曲を歌うでしょうか。またどのような歌手の曲を聴いている 5 2022/11/02 20:57
- カラオケ 皆さんはカラオケでどのような歌手の曲を歌うでしょうか。 またどのような歌手の曲を聴いて 1 2022/11/07 13:29
- Excel(エクセル) ピボットテーブル 4 2023/01/25 09:26
- バラエティ・お笑い カラオケバトルの次の出演者の中で歌唱力も魂のこもりようも表現力も抜群と思う人を上位から 1 2022/05/04 14:04
- 野球 この中で1番凄いのはどれ? 5 2022/12/31 17:30
- 東北 1972(s47)年頃の陸羽東線について教えてください。 1 2022/04/15 17:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
テーブルに表示されているもの...
-
ACCESSユニオンクエリから新テ...
-
最新日のデータのみ抽出するク...
-
Acccessで2つのテーブルから1...
-
クエリで同一テーブルの複数回...
-
Access2007を同時に複数名で使...
-
ブラウザでHPを中央に表示させる
-
Accessのリンクされたテーブル...
-
Access 分割したテーブルを一対...
-
ACCESSでテーブルをコピーしよ...
-
アクセス 部分一致の抽出
-
Accessのテーブルで、リンク?...
-
テーブル内の文字数を制限した...
-
アクセスのテーブル更新について
-
access2000・・テーブルをデー...
-
アクセス2000でクエリにデ...
-
Accessでクエリを作った際の順番
-
ACCESSでリンクテーブルのデー...
-
Accessのテーブルで、不可解な...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
ACCESSユニオンクエリから新テ...
-
テーブルに表示されているもの...
-
Accessのリンクされたテーブル...
-
access vbaにてテンポラリーテ...
-
Acccessで2つのテーブルから1...
-
最新日のデータのみ抽出するク...
-
Accessのテーブルで、リンク?...
-
Accessでリストの並び順を変更...
-
アクセス 部分一致の抽出
-
ACCESS テーブルを見比...
-
ACCESSでテーブルをコピーしよ...
-
accessのテーブルを閉じたとき...
-
ACCESS テーブルを見比...
-
AccessでのリンクテーブルとADO...
-
クエリで同一テーブルの複数回...
-
accessエラー回避について
-
アクセス2016 チェックボックス...
-
Access 分割したテーブルを一対...
-
access2000・・テーブルをデー...
おすすめ情報