• ベストアンサー

アクセスSQL

アクセス初心者です。 テーブルAに(売上日、商品A売上金額、商品B売上金額、支店)フィールドがあります。 売上日フィールドは重複あります。 次のクエリを定義するSQLはどのように記載すればいいでしょうか? 第一フィールド フィールド名:売上日リスト 内容:テーブルAの売上日を重複無しで全種類抜き出し日付順ソート。 第二フィールド フィールド名:商品Aラスト売上金額 内容:第一フィールドの売上日グループで、最後の商品A売上金額 第三フィールド フィールド名:商品Bラスト売上金額 内容:第一フィールドの売上日グループで、最後の商品B売上金額 以上よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答No.1

1、SELECT DISTINCT A.売上日 FROM A ORDER BY A.売上日; 2、SELECT LAST(A.商品A売上金額) FROM A WHERE A.売上日 = (SELECT MAX(A.売上日) FROM A); 3、SELECT LAST(A.商品B売上金額) FROM A WHERE A.売上日 = (SELECT MAX(A.売上日) FROM A); ちなみに、 SELECT FIRST(A.商品A売上金額) FROM A WHERE A.売上日 = (SELECT Max(A.売上日)FROM A); で最初! なお、2、3の回答として、 SELECT A.売上日, LAST(A.商品A売上金額) FROM A GROUP BY A.売上日; が所望なのかなとも考えられます。

hiroshi77777
質問者

お礼

参考になりました。ありがとうございました。

その他の回答 (2)

noname#22222
noname#22222
回答No.3

s_husky です。 No.2さんと同じような疑問ですが... なぜ、不確定な First、Last を求めるのかが今一つ理解できません。 データの登録・削除を繰り返せば、それらは変化すると思いますが...

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

回答の前に、アップされたテーブルは問題ありですよ 商品や支店が増えた場合テーブルを改造しなければなりません テーブル改造はできるだけ避けるように設計するべきです [店別商品別売上](売上日、支店CD、商品CD、売上金額) のようなテーブルにするところでしょうね >ラスト売上金額 売上日の抽出条件欄に In (select max(売上日) from テーブルA) なおこのようなときにLastやFirstは使えません 詳しくは,下の参考URLを見てください First および Last 関数が期待どおりのレコードを返さない

参考URL:
http://support.microsoft.com/kb/208190/ja
hiroshi77777
質問者

お礼

参考になりました。ありがとうございました。

関連するQ&A

  • ACCESS2010 SQL 結合キーについて

    お世話になります。拙い文面ではありますがよろしくお願いいたします。 Vista ACCESS2010を使用しています。 下記SQLで2個のテーブルを外部結合していますが、テーブルの一方で結合で使用しているフィールドの桁が変更になり、テキスト型のフィールドを0埋めして外部結合しようとしています。フィールドを関数で桁揃えして結合キーとして使用することはできないものでしょうか。 ---売上金額---------- 対象月 テキスト型 商品ID テキスト型 商品名 テキスト型 支店CD テキスト型 金額  通貨型 支店CD 3ケタ→5ケタへ変更 ---支店マスタ-------- 支店CD テキスト型 支店名 テキスト型 支店ソート番号 数値型 支店CD 3ケタ・・・売上金額の支店CD変更に伴い、Format等で5ケタへ変更したい ---変更前----- SELECT a.商品ID,a.商品名,a.支店CD,b.支店名,b.支店ソート番号,a.金額 FROM 売上金額 a LEFT JOIN 支店マスタ b ON a.支店CD = b.支店CD WHERE a.対象月 >=#2013/04/01# AND a.対象月 <=#2013/07/31# GROUP BY a.商品ID,a.商品名,a.支店CD,b.支店名,b.支店ソート番号,a.金額 ---以下へ変更--- SELECT a.商品ID,a.商品名,Format([支店CD],"00000"),a.支店名,支店ソート番号,a.金額 FROM 売上金額 a LEFT JOIN 支店マスタ b ON a.支店CD = b.支店CD    WHERE a.対象月 >=#2013/04/01# AND a.対象月<=#2013/07/31# GROUP BY a.商品ID,a.商品名,Format([支店CD],"00000"),a.支店名,b.支店ソート番号,a.金額 変更後の ON以下を次のように変更するとJOINでサポートされていませんのエラーとなります。 ON Format([a.支店CD],"00000") = b.支店名  都合上フィールドとテーブル名は変更していますがそれ以外は変わりません。 よろしくお願いいたします。

  • Access フィールドから値を取り出す

    お世話になります。 ・テーブル 会員番号(テキスト),商品名(テキスト),売上数(数値) 「商品名」には商品Aと商品Bがあります。 会員番号ごとに商品Aと商品Bそれぞれの売上数を分けて表示したいです。 ・クエリ SELECT 会員番号,商品A,売上数A,商品B,売上数B WHERE テーブル.商品名 = "商品A" = 商品A AND テーブル.商品名 = "商品B" = 商品B FROM テーブル GROUP BY 会員番号,商品A,売上数A,商品B,売上数B; 会員番号ごとに並べたいので、クエリをグループ化したところ、 会員番号「1」の商品Aは3件、商品Bは10件だった場合の結果として ---------------------------- 会員番号,商品A,売上数A,商品B,売上数B 1,商品A,3,商品B,3 1,商品A,10,商品B,10 ---------------------------- このように会員番号が重複して表示されてしまいます。 欲しい結果 ---------------------------- 会員番号,商品A,売上数A,商品B,売上数B 1,商品A,3,商品B,10 ---------------------------- 同一の会員番号につき、商品と売上数を1行でまとめられないでしょうか。 どうぞよろしくおねがいいたします。

  • MS ACCESSについて教えてください。

    現在、日報を作っています。メインのテーブル構造は、売上ID、売上日、売上額、来店客数、事業所ID(事業所名)などです。今回詳細のデータを入力したいと考えています。詳細データは2種類です。一つは商品別の売上数と売上金額、もう一つは、時間帯別の来店客数と売上額です。商品も売上時間帯も事業所によって、重複しているものと、重複していないものがあります。例えば、商品でいうと、A商品はA店舗とC店舗で取り扱いがあるが、他にはない等です。時間帯の集計方法も営業時間の違いで、1日2回の店舗もあれば1日3回の店舗もあります。更に商品で言うと期間限定商品などもあります。単純には商品テーブル、売上明細テーブルなどを作成し、サブシート(サブデータ)に商品や時間帯区分名などを一つ一つ選択して入力していけば、良いのですが、各店舗に見合った商品名や時間帯区分がフィールドのように表示されて、後は売上額や数量のみを入力するデータベースにするにはどうすればよいでしょうか?アクションクエリーやイベントプロシージャを使うしかないでしょうか?テーブル構造とクエリーの結合方法ではむりでしょうか?

  • AccessのSQL 部分一致したデータの更新

    以下の様な2つのテーブルが有った場合、[商品テーブルA]と[商品テーブルB] の商品名フィールド同士の商品名が部分一致した場合、 [商品テーブルB]のIDフィールドに[商品テーブルA]のIDフィールドのID番号を 付与したいと考えております。 この様な場合のSQL文を教えて頂けませんでしょうか。 [商品テーブルA] ID  商品名 ------------- 1  A1AAAA 2  A1AAAB 3  A1AABB 4  A1ABBB 5  A1BBBB [商品テーブルB] ID  商品名 -------------    AAAB    AAAA    BBBB    AABB    ABBB SQLの結果として[商品テーブルB]が以下の様に更新される結果を期待しています。 【結果】 [商品テーブルB] ID  商品名 ------------- 2  AAAB 1  AAAA 5  BBBB 3  AABB 4  ABBB 商品名が完全一致する場合であれば、update inner join on set を使えば上手くいのですが、 部分一致の場合どの様にすれば良いのか、行き詰っています。 以上、宜しくお願い致します。

  • アクセスのフィールドデータ更新について

    アクセス初心者です。 商品売上TB(レコード数10万件)に [出荷日][出荷先][商品名A][個数]の4つのフィールドがあります。 商品名TBのフィールド(レコード数500件)に [商品名B][金額A]2つのフィールドがあります。 商品名Aと商品名Bはリレーションでつながっています。 フォームで月別、商品別、出荷先別に個数、金額が見られるようにしています。 年に1度商品の単価見直しがあり、毎年10/1に行われます。 見直し前のデータも取っておきたいのですが、そのような場合 新たなテーブルを作り追加クエリで[出荷日][出荷先][商品名A][個数][金額A] を毎年追加していくのか? ファイルサイズがかなり大きくなってしまうと思います。 商品名TBに[金額B][金額C]のようにフィールドを増やしていくのか? 毎年クエリで条件式が増えるとあまりスマートでないと思います。 使い勝手も悪そうです。 通常皆さんはどのようにされているのでしょう?

  • ACCESSのレポート合計について

    いつも大変お世話になっております。 すみませんが、長くなりそうなので例えて説明します。 早速ですが以下のようなクエリでAで結合し、C列抽出してレポートでBの合計を得ようとしています。 テーブル1  テーブル2 A――――――――A       A:商品          |             |        B:金額       ―B →10円    ―C       C:商品名 A            A |             | ―B →10円     ―C ――――↓――  合計 10円 グループ化してもテーブル2はA-Cが重複している為、グループ化できません。テープル2は主キーをとっていますがなぜか重複行ができる時があるのです。(いちいち探して消したりするのが手間がかかってしまう) レポート出力時合計を出すとして重複しているとまずいので20円ではなく10円と出す方法はありますか?? 長くなりましたが、宜しくお願いします。   

  • SQL文ニ関して

    下記の3つのテーブルから下記フィールドを結合するSQL文を教えてください。 条件 ※SQL*PLUSを使用 ※店舗コードと営業日は共通(フィールドCDは別名) ※掛金額・商品券金額・クレジット金額はそれぞれフィールド数が10個(種類別) ※掛金額・商品券金額・クレジット金額はそれぞれ10個のフィールドを合計し  その合計したフィールドのみを表示させる。別名をつける。 ※必要な店舗コードのみを抽出する。  ※エディタにSPOOLする。 テーブル(1) フィールド名 1 店舗コード 2 営業日 3~12 掛金額 13~22 商品券金額 23~32 クレジット金額 テーブル(2) フィールド名 1 店舗コード 2 営業日 3 現金売上金額 テーブル(3) フィールド名 1 店舗コード 2 営業日 3 現金過不足 宜しくお願いします。

  • 要求を満たすことのできるSQL文を教えてください

    現在、売上の明細を明細IDごとにグループ化し合計値を表示させるプログラムを開発中です。 以下のような要件を満たすSQL文を教えてください。 【もともとの売上の明細のテーブル】 明細ID | NAME | KINGAKU 001  |商品A | 1000 001 |商品B | 500 001 |商品C | 300 002 |商品A | 1000 002 |商品D | 1500 【グループ化後のテーブル】 明細ID | NAME | KINGAKU 001 |商品A | 1800 002 |商品D | 2500 ・明細IDごとに金額を合計する。 ・NAMEの列については、その明細IDの中で最大の金額の商品名を入れる。 ※現在、明細IDごとに金額を合計するのはできているのですが、  もう1つの要件をどのようにすれば達成できるのか分からない  状況です。要件を満たすことのできるSQL文をぜひ教えてください。 よろしくお願いいたします。

  • Access DB 商品名の扱いについて

    (テーブル名):(フィールド名) 商品テーブル:商品名。 単価数量テーブル:商品単価、数量、仕入番号、商品名。 仕入テーブル:仕入番号、仕入日、注文日、手数料、輸送費など。 売上テーブル:売上、販売日付、仕入番号、商品名。 リレーションシップ:一対多 商品テーブル商品名-単価数量テーブル商品名 商品テーブル商品名-売上テーブル商品名 仕入テーブル仕入番号-売上テーブル仕入番号 仕入テーブル仕入番号-単価数量テーブル仕入番号 このように作成しました。 ここで問題なのが、商品名の入力です。 仕入テーブルをメイン、単価数量テーブルをサブフォームにしてフォームを作成しました。 さて、商品名を単価数量テーブル商品名フィールドのサブフォームから入力・・・と思ったら、商品テーブル商品名フィールドに名前がないためエラーが出ます。(参照整合性をしているため) サブフォームの入力フィールドを商品テーブル商品名に変更すれば入力できます。 しかし、重複した商品名を入力できません(重複しないに設定しているため) 何故このようなことをするか?ですが、同じ商品でも購入日が違えば単価が違う場合があります。 ですので単価数量テーブルでは同じ商品名を使用する必要があります。 しかし、商品テーブルでは同じ商品名は必要ありません。 もちろん先に商品テーブルに商品名を入力すれば問題ありませんが、入力効率から言って問題あります。 さてここで質問なのですが、一対多の多から商品名を入力して一側に反映できないでしょうか? 一側にすでに同じ商品名がある場合は反映してはいけません。 ちないにVBAやSQLはコピペぐらいはできますが、書けませんのでご了承を。

  • アクセスのクエリの作り方

    初心者なので教えてくださいませんか? アクセスでテーブルを複数作成して、それをクエリで結合するときに、どのテーブルからどのフィールドを選べばいいのかわかりません。 例えば・・・ 売上テーブル:NO 売上日 商品コード 数量 商品テーブル:商品コード 商品名 単価 この二つのテーブルを結合するクエリを作ります。 NO 売上日 商品コード 商品名 単価 数量 上記のフィールドを使用したいのですが、このとき、商品コードをどちらのテーブルのを使ったらよいのでしょう。 その判断は何からしたらよいのでしょうか。 うまく説明できているかわかりませんが、よろしくお願いします。