• ベストアンサー

ACCESSでの重複箇所

accessで以下の様なデータがあります 受注番号|商品名|個数|単価|送料|手数料| 1111 |みかん|3 |200 |500 |0 | 2222 |りんご|2 |250 |500 |250 | 2222 |いちご|4 |200 |500 |250 | 2222 |メロン|1 |1000|500 |250 | 3333 |ぶどう|2 |800 |500 |0 | 4444 |いちご|2 |200 |500 |250 | 4444 |メロン|1 |1000|500 |250 | 2222や4444の様に受注番号が同じ場合 2222 |りんご|2 |250 |500 |250 | 2222 |いちご|4 |200 |0 |0 | 2222 |メロン|1 |1000|0 |0 | 4444 |いちご|2 |200 |500 |250 | 4444 |メロン|1 |1000|0 |0 | と、先頭にだけ送料・手数料を残して残りを【0】もしくは 削除する方法はありますか? 手作業では件数が多い為、クエリなど使って自動的に する方法があれば教えてください。 どうぞよろしくお願い致します。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

テーブルを更新するには単純条件か、複合条件なら1:nのn側になる 場合だけ可能です。掲題ではプライマリキー項目が無いため、Accessに この関係を通知することが出来ませんので、更新不可能です。 DB上は0ではないが、表示上0にするには以下のクエリで可能です。 SELECT A.受注番号,A.商品名,A.個数,A.単価, IIf(A.商品名=B.商品名,A.送料,0) AS 送料, IIf(A.商品名=B.商品名,A.手数料,0) AS 手数料 FROM 受注表 AS A INNER JOIN (SELECT 受注番号,FIRST(商品名) AS 商品名 FROM 受注表 GROUP BY 受注番号) AS B ON A.受注番号=B.受注番号 ORDER BY IIf(A.商品名=B.商品名,0,1)

poyo-yuki
質問者

お礼

大変参考になりました。こちらの方法で無事解決致しました。 ありがとうございました。

その他の回答 (2)

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

>先頭にだけ送料・手数料を残して残りを【0】もしくは >削除する方法はありますか? こんなことをしてはだめです フィールドには同じ意味のデータのみを格納するようにしないと 使えるテーブルになりませんよ 単価・送料は受注ごとに決まり、一つの受注に複数の商品が含まれるのなら [受注](受注番号、日付、顧客No、送料、手数料) [受注詳細](受注番号、商品名、単価、個数) のような親子関係の2つのテーブルにします データベースの基本はテーブルです テーブルの作り方についてお手元の本を読み直してください

poyo-yuki
質問者

お礼

今回はDBソフトからCSVを落とした結果を編集する作業でした。 質問の仕方が少し悪かった様です。すみませんでした。 でも参考になりました。ありがとうございました。

noname#110201
noname#110201
回答No.1

クエリをここでお見せできないので、要領を得ない話になってしまうかもしれませんが、こんな手順でやったらどうでしょう。 1) 受注番号-グループ化、商品名-先頭のレコード、という2列のクエリーを作って、この結果をテーブルとして保存します。別にテーブルにしなくてもいいのですが、テーブルにしておいたほうが、後の作業が早いのではないかと思います。 2) このテーブルと元のテーブルで不一致クエリをつくり(確かウィザードがあったはずですが)、 3) これを更新クエリに変えて、送料-0、手数料-0とします。 いきなり本番しないでくださいね。 蛇足ですが、こういう場合、多分、普通は送料、手数料のテーブルを別に作るのです。 あるいは、受注番号が主キーになっている、「受注マスター」のようなテーブルはありませんか?送料、手数料のフィールドはそちらにあるべきでは?

poyo-yuki
質問者

お礼

この方法も試しました。途中まで思う様な結果になりとても参考になりました。ありがとうございました。

関連するQ&A