

たびたびお世話になります。
仮に以下のようなテーブルを考えるとします。
○テーブルA (伝票)
伝票番号 (PK)
顧客コード
○テーブルB (伝票明細)
伝票番号 (PK)
伝票明細 (PK)
注文コード
大盛り区分
レストランなどでお客さんが注文した注文伝票を
想像していただければ良いかと思います。
一つの伝票番号に対して、複数の伝票明細があると。
DB上は上記のように格納するとします。
ここでテーブル結合を使って、各伝票の1行目の明細を表示しながら
SQL1発で抜いてきたいと思います。どういうSQLを考えたら良いでしょうか?
テーブルBの表示項目が1つだけなら、
SELECT A.伝票番号, A.顧客コード, (SELECT TOP 1 注文コード FROM テーブルB B WHERE A.伝票番号 = B.伝票番号)
FROM テーブルA A
で良いのですが、複数項目となるとどうやったら良いのか判りません。
No.2ベストアンサー
- 回答日時:
テーブルBの1行目レコードというのを、どう定義するかによって、答えが変わると思います。
例えば、テーブルBの伝票明細が1から順にふられる数字であって、その伝票明細=1のものだけ取ってくれば良いというのであれば、SQL文はいたってシンプルになるかと思います。
SELECT A.伝票番号,A.顧客コード,B.伝票明細,B.注文コード,B.大盛り区分
FROM テーブルA AS A
INNER JOIN テーブルB AS B
ON A.伝票番号=B.伝票番号
AND B.伝票明細=1
こんな感じでしょうか。
伝票明細が1から始まらず、「TOP 1」を使うというのであれば
SELECT A.伝票番号,A.顧客コード,B.伝票明細,B.注文コード,B.大盛り区分
FROM テーブルA AS A
INNER JOIN テーブルB AS B
ON A.伝票番号=B.伝票番号
WHERE B.伝票明細=(SELECT TOP 1 C.伝票明細 FROM テーブルB AS C WHERE B.伝票番号=C.伝票番号)
こんな感じになります。この場合EXIST使ったりIN使ったり、細かい事を言えば色々方法はあるかと思います。でも基本的な考えは同じようなものです。
No.3
- 回答日時:
select y.*,z.*
from
(
select
a.伝票番号,
(select top 1 伝票明細 from テーブルB as b where a.伝票番号=b.伝票番号 order by b.伝票番号,b.伝票明細)
from テーブルA a
) as x
join テーブルA as y on (x.伝票番号=y.伝票番号)
join テーブルB as z on (x.伝票番号=z.伝票番号 and x.伝票明細=z.伝票明細)
みたいな感じでキーリスト(x)を作ってしまうと、後はどうにでも成るように
思います。(SQLは未検証です)
もっとも、キーリストの部分は、伝票番号配下の決定要素が1つなら、
select y.*,z.*
from
(
select 伝票番号,min(伝票明細) as 伝票明細 from テーブルB group by 伝票番号
) as x
join テーブルA as y on (x.伝票番号=y.伝票番号)
join テーブルB as z on (x.伝票番号=z.伝票番号 and x.伝票明細=z.伝票明細)
と簡素に済ませても良いかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
- 会計ソフト・業務用ソフト VBA 記録簿の行間を空けないコードを教えて欲しい。 5 2023/07/10 19:29
- その他(データベース) 伝票番号、品番、在庫としてマクロでもAccessでもデータ表を作りたいのですが、ご指導お願いします 1 2022/11/13 23:48
- メルカリ らくらくメルカリ便でクロネコヤマトを使って商品を送ってもらいましたが数日経っても伝票未登録のままです 1 2022/09/29 19:56
- スーパー・コンビニ ファミリーマートでバイトしてるものです。配達のやつで、たまにファミマの伝票では無い伝票を持ってくるお 2 2022/05/29 13:00
- 運輸業・郵便業 【至急】 国際便のインボイスについて、伝票番号が空欄なのですが、伝票はヤマト運輸さんのサイトを見て自 2 2023/03/16 14:41
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- 郵便・宅配 ゆうパック。追跡番号だけで、着払いか?、元払いか?を判定することはできる? 1 2022/07/02 14:05
- 会社・職場 濡れ衣を着せてしまいました。 飲食店のアルバイトで、忙しすぎてキャパオーバーになり、違う人に怒ってし 2 2023/01/02 01:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つのテーブルを結合して最大値...
-
LEFT JOIN あいまいな外部結合
-
ACCESS フォーム入力で...
-
アクセスのフォームで連動した...
-
文字列のあるキーワードから開...
-
フィールド名を取得する方法に...
-
updateでグループ化
-
商品番号を入力すると、商品名...
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
SQLで特定の項目の重複のみを排...
-
SELECT 文 GROUP での1件目を...
-
エクセルで最後の文字だけ置き...
-
Outlook 送受信エラー
-
for whichの使い方
-
外部参照してるキーを主キーに...
-
イェイイェイイェイ イェイイェ...
-
1日に1人がこなせるプログラム...
-
SQLServerでtime型への変換
-
select文のwhere句に配列を入れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
updateでグループ化
-
LEFT JOIN あいまいな外部結合
-
商品番号を入力すると、商品名...
-
Accessのフォームで思った順番...
-
orace SQL文のエラー(ORA-0092...
-
特定条件での連番の振り方を教...
-
IDの欠番
-
2つのテーブルを結合して最大値...
-
各伝票に対して明細を1行目だけ...
-
Word差し込み印刷 数式について
-
アクセスのフォームで連動した...
-
ACCESSでテキストデータ...
-
エクセルでリピート率
-
Accessレポート 複数条件での集計
-
ファイルメーカーからCSVへのエ...
-
accessフォームのボタン→レポー...
-
アクセス メインフォームの伝...
-
文字列のあるキーワードから開...
-
ACCESSでフォーム上のオブジェ...
-
同一テーブルのデータを検索条...
おすすめ情報