たびたびお世話になります。
仮に以下のようなテーブルを考えるとします。
○テーブル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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
SELECT 文 GROUP での1件目を取得
SQL Server
-
SELECTで1件のみ取得するには?
Oracle
-
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
-
4
left joinなどで結合対象のレコードから1件だけ得る方法は
MySQL
-
5
SQL文で右から1文字だけ削除するやり方
MySQL
-
6
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
7
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
8
Unionの結果全体をOrder By したい。
SQL Server
-
9
GROUP BYを行った後に結合したい。
Oracle
-
10
Oracleのビュー作成時に「指定した列名の個数が無効です」エラー
Oracle
-
11
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
12
GROUP BYを使ったSELECT文の総件数を求める方法
SQL Server
-
13
SELECTの結果で同一行を複数回出力する
Oracle
-
14
[SQL]重複内容を持つデータから1件抽出かつ複数のカラムを表示したい
その他(データベース)
-
15
datetime型でNULL値を入れたい。
SQL Server
-
16
SQL Left Join で重複を排除するには
SQL Server
-
17
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定条件での連番の振り方を教...
-
商品番号を入力すると、商品名...
-
2つのテーブルを結合して最大値...
-
ACCESSでフォーム上のオブジェ...
-
LEFT JOIN あいまいな外部結合
-
エクセルでリピート率
-
orace SQL文のエラー(ORA-0092...
-
updateでグループ化
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
-
フィルターかけた後、重複を除...
-
SQLで特定の項目の重複のみを排...
-
カーソル0件の時にエラーを発生...
-
for whichの使い方
-
カーソルを使って、最終行レコ...
-
エクセルで個人用マクロの配布方法
-
SELECT 文 GROUP での1件目を...
-
1、Rstudioで回帰直線を求める...
-
INSERT文でフィールドの1つだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
商品番号を入力すると、商品名...
-
LEFT JOIN あいまいな外部結合
-
Accessのフォームで思った順番...
-
2つのテーブルを結合して最大値...
-
特定条件での連番の振り方を教...
-
updateでグループ化
-
IDの欠番
-
orace SQL文のエラー(ORA-0092...
-
エクセルでリピート率
-
各伝票に対して明細を1行目だけ...
-
accessクエリの結果の縦横表示...
-
ACCESSでフォーム上のオブジェ...
-
Word差し込み印刷 数式について
-
Access 会員番号4桁にする方法
-
正規化の問題
-
文字列のあるキーワードから開...
-
アクセスのフォームで連動した...
-
Accessレポート 複数条件での集計
-
SQL内での計算に関して
-
ACCESSのテーブル設計と...
おすすめ情報