

たびたびお世話になります。
仮に以下のようなテーブルを考えるとします。
○テーブル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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
orace SQL文のエラー(ORA-0092...
-
LEFT JOIN あいまいな外部結合
-
Word差し込み印刷 数式について
-
商品番号を入力すると、商品名...
-
updateでグループ化
-
エクセルでリピート率
-
エクセルで最後の文字だけ置き...
-
for whichの使い方
-
差し込み後、元データを変更し...
-
Outlook 送受信エラー
-
エクセルのxans.について
-
ソフトバンクの無料着うたのお...
-
特定の文字列で列を区切るには?
-
no appleとno applesの違いは?
-
SQLで特定の項目の重複のみを排...
-
フィルターかけた後、重複を除...
-
php+mysqlで複数選択削除について
-
外部参照してるキーを主キーに...
-
エクセルに見えない文字(JISX0...
-
カーソル0件の時にエラーを発生...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
updateでグループ化
-
商品番号を入力すると、商品名...
-
2つのテーブルを結合して最大値...
-
LEFT JOIN あいまいな外部結合
-
orace SQL文のエラー(ORA-0092...
-
各伝票に対して明細を1行目だけ...
-
特定条件での連番の振り方を教...
-
Accessのフォームで思った順番...
-
Word差し込み印刷 数式について
-
エクセルでリピート率
-
accessクエリの結果の縦横表示...
-
突合せによるレコード結合につ...
-
IDの欠番
-
ACCESS フォーム入力で...
-
コンピュータ
-
Accessレポート 複数条件での集計
-
同一テーブルのデータを検索条...
-
accessフォームのボタン→レポー...
-
SQL文:ある状態の明細のみを抽...
-
アクセスのフォームで連動した...
おすすめ情報