- ベストアンサー
伝票リスト中に商品名を入れたい方法は?
- 売上伝票のリスト中に商品名を入れたい方法についてお知りですか?
- 過去ログを探しても見つからなかったので、こちらで質問させていただきます。
- 現在のクエリーでは伝票リストに重複する商品名が表示されてしまいますが、一意の商品名が表示されるような方法を知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>明細の行番号はオートナンバーになっていて >伝票が新規で作成されたりすると増えちゃいます。 なるほど。 明細の行番号は、伝票ごとに振ってあるのでなく、全部の通し番号になっているのですね。 >一行目(一番少ない行番号と仮定して)を取るの... まず、伝票番号ごとの一行目の行番号をとってくるクエリーを作成しましょう。 SELECT 伝票番号, min(行番号) AS minRowNum FROM T_売上伝票明細 GROUP BY 伝票番号 ですね。 ここまで、出来ればあとはこれをネストしてその他のデータを結合しましょう。 結果はこうなりますね。 SELECT T_売上伝票.*, T_売上伝票明細.* FROM (T_売上伝票 INNER JOIN T_売上伝票明細 ON T_売上伝票.伝票番号 = T_売上伝票明細.伝票番号) inner join (SELECT 伝票番号, min(行番号) AS minRowNum FROM T_売上伝票明細 GROUP BY 伝票番号) as Nest on (T_売上伝票明細.伝票番号=Nest.伝票番号) and (T_売上伝票明細.行番号=Nest.minRowNum) 一つのクエリにすると複雑そうに見えますが、面倒くさいだけで複雑ではありません。
その他の回答 (2)
- stork
- ベストアンサー率34% (97/285)
>伝票番号|商品コード|商品名 >001| 000001|商品A >002| 000002|商品B T_売上伝票とT_売上伝票明細は1:多の関係にありますよね。 伝票番号001はに対応する行番号は複数のものがあるので、伝票番号ひとつを一行にすると言うことは、明細のどの行を持ってくるのか指定しなければなりません。 たとえば一行目を持ってくるのであればこうなります。 select 伝票番号,商品コード,商品名 form [T_売上伝票明細] where 行番号=1 (ご質問のケースだと連結する必要が無いので省略しました)
補足
早速のご回答有り難うございます^^ 全然きちんと書いておりませんでした。 明細の行番号はオートナンバーになっていて 伝票が新規で作成されたりすると増えちゃいます。 ですので、書込みしていただいた、 Where句の式が使えません。 一行目(一番少ない行番号と仮定して)を取るのに、 "=DMin([行番号])"を使ってみようとしたのですが、 式がうまくクエリの条件に入ってくれません。 VBAでなら使えるんでしょうね。。DCount使えてるし。 困りました。。。
- stork
- ベストアンサー率34% (97/285)
>希望は、 >001 000001 商品A ........ >002 000002 商品B ........ ↑ ↑ ↑どの列ですか?
補足
早速のレスありがとうございます。 失礼しました。補足いたします。 伝票番号|商品コード|商品名 001| 000001|商品A 002| 000002|商品B よろしくお願いいたします。
お礼
ありがとうございました。 クエリー上ではうまくいかなかったのですが、VBAでクエリーを走らせてテンポラリのテーブルに書き出してやると、 一行目だけとれた一覧が出来ました。これはただ単に私のやり方が悪かったのでしょう。 大変に参考になりました。これからも宜しくお願い致します。