• ベストアンサー

Access 重複クエリにて、あるフィールドの値をキーに比較対象レコードを限定したい

いつもお世話になっております。よろしくお願い致します。 Access 2002 SP3。 重複クエリを使って、1つのテーブル内で、「重量」と「入庫日」が一致するレコードを抽出しています。 (重複クエリ実行結果サンプル) ID    重量    入庫日    管理番号    取引先 M001   5140   2005/09/27   P5916000     M社 S018   5140   2005/09/27   P5916000PP    S社 M169   8100   2005/04/22   522A3014     M社 S6    9000   2005/04/22   522A3014GA    S社 S171   1050   2005/01/31   Z3988722     S社 S4    1050   2005/01/31   Z165785SP2    S社 「管理番号」の入力ミスや桁数違いを発見するために、「重量」と「入庫日」が同じものを抽出するのですが、 取引先が、M社 vs S社で比較したいのです。 重複クエリウィザードを用いて作成すると、S社 vs S社においても、「重量」「入庫日」が同じレコードを 表示してしまうので、それらは省きたいのです。 ※上記サンプルでは、IDフィールドの値が「S141」と「S4」が該当。 (可能ならば、逆に、それらだけを表示するクエリも欲しい) Accessには慣れておらず、またSQLもシスアド取得のために少ししたぐらいなもので・・・・。 どなたかお知恵をお貸しください。 情報が不足していれば、補足しますので、よろしくお願い致します。

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

  • ベストアンサー
noname#15423
noname#15423
回答No.2

 以下を、クエリのSQLビューで貼り付けてください(「テーブル名」はお使いのテーブルの名称に変更してください)。「入庫日」のデータ型は「日付/時刻型」であることを前提としています。 SELECT テーブル名.ID, テーブル名.重量, テーブル名.入庫日, テーブル名.管理番号, テーブル名.取引先 FROM テーブル名 WHERE (((DCount("*","テーブル名","[重量] =" & [重量] & " AND [入庫日] = #" & [入庫日] & "# AND [取引先] " & IIf([1:取引先が相違、2:同一]=1,"<> '","= '") & [取引先] & "'"))>=[1:取引先が相違、2:同一])) ORDER BY テーブル名.重量, テーブル名.入庫日, テーブル名.取引先;  このクエリを開くと、「1:取引先が相違、2:同一」と表示され、入力待ちになりますので、取引先が異なるものを比較したい場合は数字の「1」、同じものを比較したい場合は数字の「2」を入力してください。  これで水曜どうでしょう。

masayumi2331
質問者

お礼

すばやいご回答ありがとうございます。 自分の勉強不足を痛感しました。 他にも様々な分析のために必要なクエリが多くあって、 管理の困難さに辟易していたのですが、 パラメータを使えば、クエリ数が抑えられますね♪ 感謝感謝です。ありがとうございました。

その他の回答 (1)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

まずテーブル名をAとした場合 SELECT A.重量, A.入庫日, A.取引先, A.ID FROM A WHERE (((A.重量) In (SELECT [重量] FROM [A] As Tmp GROUP BY [重量],[入庫日],[取引先] HAVING Count(*)>1 And [入庫日] = [A].[入庫日] ))) ORDER BY A.重量, A.入庫日, A.取引先; 上記のSQLで重量・入庫日・取引先が重複するレコードを抽出する重複クエリを作ります。上記でIDがS171とS4のレコードが抽出されます。 このクエリをサンプルの様に表示する重複クエリにネストすれば出来るのでは テーブルをAとして先の重複クエリをA重複1_Qというクエリ名とした場合 SELECT A.重量, A.入庫日, A.ID, A.取引先, A重複1_Q.ID FROM A LEFT JOIN A重複1_Q ON A.ID = A重複1_Q.ID WHERE (((A.重量) In (SELECT [重量] FROM [A] As Tmp GROUP BY [重量],[入庫日] HAVING Count(*)>1 And [入庫日] = [A].[入庫日])) AND ((A重複1_Q.ID) Is Null)) ORDER BY A.重量, A.入庫日; としてA重複_Qというクエリを作り開けば取引先が重複しない他の重複レコードを抽出できると思いますが。 A重複1_Qを開けばIDがS171とS4のレコードが抽出されます。 SQLピューで上記のSQLをコピペしてテーブル名やフィールド名を正しい名前に変更してみてください。 これで行けるはずです。

masayumi2331
質問者

お礼

すばやいご回答ありがとうございます。 自分の勉強不足を痛感しました。 感謝感謝です。ありがとうございました。

関連するQ&A