ACCESSを活用して商品変動を追いたい(別続)

このQ&Aのポイント
  • 質問者は、データベースのテーブルデータを使用して、商品の変動を追いたいと考えています。具体的には、受付日、氏名、電話番号、商品コード、商品名、数量、価格のデータを持つテーブルがあり、このデータを元に変動を抑えた表示を行いたいとのことです。質問者は、スイッチングをしていないデータを非表示にする方法について尋ねています。
  • 提供されたテーブルデータの例を元に、質問者の希望する表示を実現する方法について考えます。希望の表示は、前回からの変動だけを抑えたものであり、スイッチングをしていないデータは非表示にすることが目的です。
  • 質問者は、連続する後ろのデータが変動なしとして非表示にできるか尋ねています。ただし、1日の受付が複数の個数で、その個数が一致し、内容も一致したデータが連続する場合に限定されます。この場合、連続する後ろのデータは変動なしとして非表示にすることができます。
回答を見る
  • ベストアンサー

ACCESSを活用して商品変動を追いたい(別続)

達人様 http://okwave.jp/qa/q8783133.html についての続きです。。 No.3 のSQL記述により、 こちらのテーブルデータが、、 受付日 氏名 電話番号 商品コード 商品名 数量 価格 2014/04/01 山田花子 12345678 55555 魔法瓶 1 2980 2014/04/02 大島太陽 34567890 55555 魔法瓶 1 2980 2014/05/01 山田花子 12345678 33333 御茶碗 1 1280 2014/05/14 大島太陽 34567890 55555 魔法瓶 2 5960 2014/07/15 山田花子 12345678 22222 洗面器 1 980 2014/08/19 佐藤一郎 56789870 11111 お箸 1 580 2014/09/10 佐藤一郎 56789870 11111 お箸 1 580 2014/09/12 鈴木次郎 89089089 11111 お箸 1 580 2014/09/12 鈴木次郎 89089089 22222 洗面器 1 980 2014/09/29 鈴木次郎 89089089 11111 お箸 1 580 2014/09/29 鈴木次郎 89089089 22222 洗面器 1 980 以下のようになりました。 受付日 切り替え 氏名 電話番号 商品コード 商品名 数量 価格 2014/04/01 山田花子 12345678 55555 魔法瓶 1 2980 2014/05/01 30 山田花子 12345678 33333 御茶碗 1 1280 2014/07/15 75 山田花子 12345678 22222 洗面器 1 980 2014/09/12 鈴木次郎 89089089 11111 お箸 1 580 2014/09/12 鈴木次郎 89089089 22222 洗面器 1 980 この場合、鈴木次郎も佐藤一郎のように変動なし(非表示)とはできないのでしょうか。 ↓↓↓ 2014/09/12 鈴木次郎 89089089 11111 お箸 1 580 2014/09/12 鈴木次郎 89089089 22222 洗面器 1 980 2014/09/29 鈴木次郎 89089089 11111 お箸 1 580 2014/09/29 鈴木次郎 89089089 22222 洗面器 1 980 ●希望の表示(前回からの変動だけを抑えたい) 受付日 切り替え 氏名 電話番号 商品コード 商品名 数量 価格 2014/04/01 山田花子 12345678 55555 魔法瓶 1 2980 2014/05/01 30 山田花子 12345678 33333 御茶碗 1 1280 2014/07/15 75 山田花子 12345678 22222 洗面器 1 980 スイッチングをしていないものは非表示としたい(複数行も同じ)、矛盾していますでしょうか。 ↓↓↓ >> というのは、6/1 の「御茶碗」の表示を確認する際、5/1 に「御茶碗」以外があるか・・・ 「魔法瓶」があるので、表示する様に・・・ もう1つの 6/1 の「魔法瓶」の表示を確認する際、5/1 に「魔法瓶」以外があるか・・・ 「御茶碗」があるので、表示する様に・・・ つまり、1日の受付が複数の個数で、その個数が一致し、内容も一致したものが連続する場合、 表示されます。 必要であれば、考えてみますが 仮に、「1日の受付が複数の個数で、その個数が一致し、内容も一致したものが連続する場合」は スイッチングをしていないので、これは連続する後ろの方は変動なしとして非表示とできるもの なのでしょうか???? むずかしいでしょうか。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

#2です 一応、補足が記述できるよう投稿しておきます。 有効に使ってください。 SQL の記述で、どこで何をやっている??? とか補足あれば説明します。 SQL を提示する時って、VBA の様に ' 以降はコメント・・・ってことはないと思うので、 コピペで使えるもの・・・これを重視しています。 なので、補足が無い限り説明しない様にしてみるかな・・・とも思っていたりします。 読んでわかる人ならそれはそれで・・・・ 何をやっている?・・・せっかく質問したんだから理解しておきたい・・・ なら、応援します。 (といっても、我流なので嘘をつくかも・・・また、もっと効率の良い方法があったりして・・・)

mcdone
質問者

お礼

とんでもないです。大変参考になりました!ありがとうございます。

その他の回答 (2)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

#1です テーブル名を ★★ と仮定します ※ 変な所で折り返し表示になるかもしれませんが、メモ帳とかにコピーしてみてください。 ※ 記述の仕方はいろいろあると思いますけど・・・動いたみたいだったので SELECT T1.受付日, T1.受付日-T2.受付日 AS 切り替え, T1.氏名, T1.電話番号, T1.商品コード, T1.商品名, T1.数量, T1.価格 FROM (SELECT Q1.*,Q3.CT FROM (★★ AS Q1 INNER JOIN (SELECT DISTINCT Q12.電話番号 FROM (SELECT 電話番号, Count(*) AS CT FROM (SELECT DISTINCT 受付日, 電話番号 FROM ★★) AS Q11 GROUP BY 電話番号) AS Q12 INNER JOIN (SELECT 電話番号, Count(*) AS CT FROM ★★ GROUP BY 電話番号, 商品コード & 商品名) AS Q13 ON Q12.電話番号=Q13.電話番号 AND Q12.CT<>Q13.CT ) AS Q2 ON Q1.電話番号=Q2.電話番号) INNER JOIN (SELECT 受付日, 電話番号, Count(*) AS CT FROM ★★ GROUP BY 受付日, 電話番号) AS Q3 ON Q1.受付日=Q3.受付日 AND Q1.電話番号=Q3.電話番号 ) AS T1 LEFT JOIN (SELECT 受付日, 電話番号, Count(*) AS CT FROM ★★ GROUP BY 受付日, 電話番号) AS T2 ON T1.電話番号=T2.電話番号 AND T1.受付日>T2.受付日 WHERE T2.受付日 Is Null OR ( T2.受付日=(SELECT Max(受付日) FROM ★★ WHERE 電話番号=T1.電話番号 AND 受付日<T1.受付日) AND IIF(T1.CT<T2.CT, True, T1.商品コード & T1.商品名 Not In (SELECT 商品コード & 商品名 FROM ★★ WHERE 受付日=T2.受付日 AND 電話番号=T1.電話番号)) ) ORDER BY T1.電話番号, T1.氏名, T1.受付日; ※ 上記は、電話番号だけをキーにしたものになります。 氏名、電話番号をキーにしたものは考えてみてください。 無理なようなら・・・また、動作がおかしければ補足してください。

mcdone
質問者

お礼

早速にありがとうございます。試します。取り急ぎお礼まで。

mcdone
質問者

補足

受付日 切り替え 氏名 電話番号 商品コード 商品名 数量 価格 2014/04/01 山田花子 12345678 55555 魔法瓶 1 2980 2014/05/01 30 山田花子 12345678 33333 御茶碗 1 1280 2014/07/15 75 山田花子 12345678 22222 洗面器 1 980 ↑ 来ました!!!!!ありがとうございます!!!!! いろんなパターンで試行してみます。本当にありがとうございます。しかもSQL構文だけで実現できたわけですし。ビックデータでもいけるか動かしてみます。 また複数条件(氏名・電話番号)もみてみようとおもいます。 本当に感謝です。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> 以下のようになりました。 結果として提示されたのは、 #3のものではなく、#4での結果ですよね。 #3であれば、 受付日 切り替え 氏名 電話番号 商品コード 商品名 数量 価格 2014/04/01   山田花子 12345678 55555 魔法瓶 1 2,980 2014/05/01 30 山田花子 12345678 33333 御茶碗 1 1,280 2014/07/15 75 山田花子 12345678 22222 洗面器 1 980 2014/09/12   鈴木次郎 89089089 11111 お箸  1 580 2014/09/12   鈴木次郎 89089089 22222 洗面器 1 980 2014/09/29 17 鈴木次郎 89089089 11111 お箸  1 580 2014/09/29 17 鈴木次郎 89089089 22222 洗面器 1 980 となったはずです。(私の環境ではそうです) 提示されたものが #4の結果だった場合、 > ↓↓↓ > >> から下の塊の記述は不要だったのでは? 条件・環境を後だしで変更することはしないで、最終形を提示してもらえませんか? (同一受付日に複数レコードがある・・・聞いて初めて分かった・・・) (複数レコード前後での、表示有無についても補足で初めて分かった・・・) (同一内容の複数レコード連続・・・考慮しきれていなかった事はありますが・・・) また、その都度つどの回答で xx するには・・・とか 回答した側としては、あまり気分の良いものではありません (最終形にもなっていないものが氾濫?) 補足をお願いしていいですか 提示されたサンプルで、希望の表示にさえなれば良いですか? 方法は問いませんか? また、電話番号だけをキーにしたものが良いですか? ※ 電話番号だけをキーとして、サンプルで確認できた一応動くものはありますが・・・  それが使いものになるのかは分かりませんけど(データ量の増減とか・・・)

mcdone
質問者

補足

失礼しました!!!!! こちら以下の通り私の方も表示されています。 > #3であれば、 受付日 切り替え 氏名 電話番号 商品コード 商品名 数量 価格 2014/04/01   山田花子 12345678 55555 魔法瓶 1 2,980 2014/05/01 30 山田花子 12345678 33333 御茶碗 1 1,280 2014/07/15 75 山田花子 12345678 22222 洗面器 1 980 2014/09/12   鈴木次郎 89089089 11111 お箸  1 580 2014/09/12   鈴木次郎 89089089 22222 洗面器 1 980 2014/09/29 17 鈴木次郎 89089089 11111 お箸  1 580 2014/09/29 17 鈴木次郎 89089089 22222 洗面器 1 980 30246kiku様、 整理します。 1.(同一受付日に複数レコードがある・・・聞いて初めて分かった・・・) >ございます 2.(同一内容の複数レコード連続・・・考慮しきれていなかった事はありますが・・・) >ございます 3.提示されたサンプルで、希望の表示にさえなれば良いですか? >はい 4.方法は問いませんか? >はい 5.※ 電話番号だけをキーとして、サンプルで確認できた一応動くものはありますが・・・  >電話番号をKEYにする、と電話番号&氏名をKEYにするの2つで比較したいです。 最終形: #3に対してさらに上記(No1~5)を考慮したい (ex:この場合、鈴木次郎は変動していないので表示しない)。 上記が最終形です。丁寧に回答いただき本当に恐縮です。

関連するQ&A

  • ACCESSを活用して商品変動を追いたい(別)

    以下受注情報(テーブル)があります。 受付日  氏名    電話番号  商品コード 商品名 数量 価格 2014/4/1  山田花子  12345678 55555 魔法瓶  1    2980 2014/4/2  大島太陽  34567890 55555 魔法瓶  1    2980 2014/5/1  山田花子  12345678 33333 御茶碗  1    1280 2014/5/14  大島太陽  34567890 55555 魔法瓶  2    5960 2014/7/15  山田花子  12345678 22222 洗面器  1     980 2014/8/19  佐藤一郎  56789870 11111 お箸  1     580 上記について、氏名、電話番号が同じお客様の場合で、 商品コード、商品名が前のリストから変わったリストのみ クエリー(SQL?)で、以下のように抽出することは難しいでしょうか。 (変わったという判断は直前を見る) 受付日 切り替え  氏名  電話番号   商品コード 商品名 数量  価格 2014/4/1    山田花子 12345678   55555    魔法瓶 1  2980 2014/5/1  30    山田花子 12345678   33333    御茶碗 1  1280 2014/7/15  75    山田花子 12345678   22222    洗面器 1   980 切り替え:前に注文した日付からの経過(日)を反映したい。 またテーブルの列は追加(集計ロジックに関係しないただの列)されていくこともあり、テーブルについては列全部をクエリーでは自動反映するとしたい。 (わざわざその都度、追加列を指定したくない) お手数ですがご教授いただければ幸いです(願)。

  • ACCESSを活用して商品変動を捉えたい(2)

    以下受注情報(テーブル)があります。 受付日   氏名     会員番号   商品コード  商品名  数量  価格 2014/4/1   山田花子   12345678  55555  魔法瓶   1     2980 2014/4/2   大島太陽   34567890  55555  魔法瓶   1     2980 2014/5/1   山田花子   12345678  33333  御茶碗   1     1280 2014/5/14   大島太陽   34567890  55555  魔法瓶   2     5960 2014/7/15   山田花子   12345678  22222  洗面器   1      980 2014/8/19   佐藤一郎   56789870  11111  お箸   1      580 上記について、会員番号が同じお客様の場合で、 商品コード、商品名が前のリストから変わったリストのみ クエリー(SQL?)で、以下のように抽出することは難しいでしょうか。 (変わったという判断は直前を見る) 受付日  切り替え  氏名  会員番号   商品コード  商品名  数量  価格 2014/4/1     山田花子  12345678    55555     魔法瓶  1   2980 2014/5/1   30     山田花子  12345678    33333     御茶碗  1   1280 2014/7/15   75     山田花子  12345678    22222     洗面器  1    980 切り替え:前に注文した日付からの経過(日)を反映したい。 またテーブルの列は追加(集計ロジックに関係しないただの列)されていくこともあり、テーブルについては列全部をクエリーでは自動反映するとしたい。 (わざわざその都度、追加列を指定したくない) お手数ですがご教授いただければ幸いです(願)。

  • ACCESSを活用して商品変動を捉えたい(6再再)

    クエリー14 http://okwave.jp/qa/q8781488.html を参考にSELECT構文を作っていますが、、、 上記URLの画面のようには出ず、以下のようになります。 ※商品名、商品コードが変わらない「大島太陽」も抽出される(数量、価格が変化しているだけ) ※ 前回受注日 切り替え 受注日 氏名 会員番号 商品コード 商品名 数量 価格 2014/04/01 山田花子 12345678 55555 魔法瓶 1 2980 2014/04/01 30 2014/05/01 山田花子 12345678 33333 御茶碗 1 1280 2014/05/01 75 2014/07/15 山田花子 12345678 22222 洗面器 1 980 2014/04/02 大島太陽 34567890 55555 魔法瓶 1 2980 2014/04/02 42 2014/05/14 大島太陽 34567890 55555 魔法瓶 2 5960 クエリー14のイメージで間違えないでしょうか。 SELECT DBLookup("SELECT 受注日 FROM 受注履歴 WHERE 会員番号=" & [会員番号] & " AND 受注日 < #" & [受注日] & "# ORDER BY 受注日 DESC") AS 前回受注日, DateDiff("d",前回受注日,受注日) AS 切り替え, * FROM 受注履歴 WHERE (((DBLookup("SELECT COUNT(受注日) FROM 受注履歴 WHERE 会員番号=" & [会員番号]))>1)) ORDER BY 受注履歴.会員番号, 受注履歴.受注日;

  • 【エクセル関数】複数条件(月別・個人別)で集計したい

    例えば、以下のような表があるとします。 A        B       C 2005/10/12  山田一郎  5,000 2005/10/17  鈴木花子  1,000 2005/10/28  鈴木花子  2,000 2005/11/03  山田一郎  1,000 2005/11/17  山田一郎  2,000 2005/11/19  鈴木花子  4,000 これを、次のように仕訳したいのですが、      山田一郎  鈴木花子 10月  5,000     3,000 11月  3,000     4,000 どのような関数を使えばうまく集計することができますでしょうか? 自分なりに、SUMIFやSUMPRODUCTを使って考えてみたのですが、 うまく集計することができませんでした。 どうぞよろしくお願いします。

  • Accessで一致データを抜いて項目をずらす方法

    Access2000を使用して、テーブル1のフィールド2~5で、テーブル2と一致したフィールドを抜いて項目をシフトさせたいのですが、どのような方法があるのでしょうか。 <元テーブル>    フィールド→ 氏名, 名1, 名2, 名3, 名4 ・テーブル1の項目 山田,花子,次郎,三郎,四郎           鈴木,五郎,六郎,七朗,和子           佐藤,和子,一郎,太郎,四郎 ・テーブル2の項目 山田,花子           鈴木,七朗           鈴木,和子          佐藤,一郎           佐藤,四郎           佐藤,和子 <変換後テーブル>テーブル1を基準として   フィールド→ 氏名, 名1, 名2, 名3, 名4           山田,次郎,三郎,四郎,null           鈴木,五郎,六郎,null,null           佐藤,太郎,null,null,null 分りずらい説明で申し訳ありませんが、宜しくお願いします。

  • ACCESSのテーブルでこういう表示は可能でしょうか?

    お願いします 下記のように名前・電話番号・年齢フィールドあるテーブルがあり同一の番号が存在した場合には年齢が一番上の人が代表者となりそれ以外の人は同一のレコードの家族フィールドに表示させたいと思います。 そのようなクエリを組むことは可能でしょうか? 名前 電話番号             年齢 ==================================================== 山田太郎 00-0000-0000  50 山田花子 00-0000-0000  45 山田一郎 00-0000-0000  20 田中次郎 11-1111-1111  55 ↓ 代表者 電話番号            家族1  家族2 ==================================================== 山田太郎 00-0000-0000  山田花子 山田一郎 田中次郎 11-1111-1111 以上よろしく願いします。

  • 教えてください(EXCEL)

    MAX関数を使って最高点を出し、その横に最高点を出した人の名前を表示したいのですが、どのような式を作ればよいでしょうか? こんな感じです。 例) 名前 合計 平均点 山田 太郎 370 93 鈴木 一郎 275 69 山田 花子 172 43 鈴木 次郎 192 48 ・・・ 最大値 93 平均点の最大値は93で、山田太郎さんなので 93の横に「山田太郎」さんを表示されるには どうしたらよいでしょうか よろしくお願いします。

  • エクセルの同じ名前をカウントする方法

    エクセルの同じ名前をカウントする方法 初歩的な質問ですみません。 山田太郎 田中一郎 鈴木三郎 高橋次郎 鈴木三郎 高橋次郎 鈴木三郎 A1のセルにこういった状態で名前が入力されていた場合に 山田太郎 1 田中一郎 1 鈴木三郎 3 高橋次郎 2 となるように同じ名前がいくつあるかをカウントさせ上記のように表示させたいのですが、 どうしたらいいのでしょうか? (同じシートでも、別のシートでもどちらでも構いません) 至急お答えいただけるとありがたいです。 よろしくお願いします。 

  • エクセル キーとなる項目で判別し重複データ行を削除したい

    エクセル2002を使用しています。 差込印刷用のデータとして整える方法を教えていただきたいと存じます。 具体的には、子供ごとのレコードデータから、親宛の封筒宛名ラベルを作成したいと考えていて、2人兄弟や3人兄弟の場合でも封筒は1通なので、 キーとなる項目を目安に、不必要な行を削除すればできると考えましたが、具体的な方法がわからないでいます。 現在のデータは、以下のものです。(簡潔にするために列を部分的に省いています) 世帯コード   親の氏名   住所           子の氏名 0011223    鈴木 一郎  東京都千代田区一丁目   鈴木 次郎 0011223    鈴木 一郎  東京都千代田区一丁目   鈴木 三郎 0011223    鈴木 一郎  東京都千代田区一丁目   鈴木 四郎 0011556    山田 花子  埼玉県川口市中央     山田 洋子 0011556    山田 花子  埼玉県川口市中央     山田 和夫 0153355    佐藤 次郎  千葉県船橋市海浜     佐藤 みく 0002333    鈴木 一郎  神奈川県川崎区高津区   鈴木 空 0002333    鈴木 一郎  神奈川県川崎区高津区   鈴木 陸 これを、次のように「世帯コード」で判別して世帯ごとの最初の行だけを抜き出したり、2行目以降を削除したりできれば、差込印刷用のデータとして利用できると思います。 世帯コード   親の氏名   住所           子の氏名 0011223    鈴木 一郎  東京都千代田区一丁目   鈴木 次郎 0011556    山田 花子  埼玉県川口市中央     山田 洋子 0153355    佐藤 次郎  千葉県船橋市海浜     佐藤 みく 0002333    鈴木 一郎  神奈川県川崎区高津区   鈴木 空 (世帯ごとに一行ずつになっています。親の氏名のうち、鈴木 一郎 さんは、同姓同名の方です。世帯コードが違うので区分できます。) エクセルの機能でこのようにできる方法はあるでしょうか? もしくは別の方法でも、宛名ラベルを親宛に一枚印刷できる方法があるでしょうか? お願いいたします。 データ用のシートですので、行や列の挿入や別シートの利用などはすべてできますので、よろしくお願いいたします。

  • 養子縁組後の姓

    例えば 70代夫婦(山田太郎 花子) 嫁いだ娘(鈴木よし子) その夫(鈴木一郎) がいます。 今回養子縁組をすることになりました。 山田太郎、花子夫婦が 鈴木性となることはできますか?

専門家に質問してみよう