• ベストアンサー

重複データについて

accessで重複しているデータを抽出したいのですが、初心者のためよくわかりません。 1列目 2列目 A   2  A   3 B   4 C   5 C   5 C   5 というデータがあった場合、1列目は重複していて2列目は重複していないデータだけを抽出したい場合、どういうクエリにすればいいでしょうか? 重複クエリではこの場合、Cも出力されてしまうためどうしたらいいのか悩んでおります。 よろしくお願いいたします。

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

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

> 1列目は重複していて2列目は重複していないデータだけを抽出 これはどのような状況(結果)を期待していますか。 1列目 2列目 A   2  A   3 B   4 C   5 C   5 C   5 では、 1列目 2列目 A   2  A   3 を期待していますか? > 2列目は重複していない の範囲は? 重複のあった1列目内でのこと? 1列目に関係なく? 1列目 2列目 A   2  A   3 A   3 B   4 C   4 C   5 C   5 で、 1列目 2列目 A   2  C   4 を期待しているのなら テーブル名を「T_1」、フィールド名を「列1」「列2」と仮定します。 SELECT T_1.列1, T_1.列2 FROM T_1 WHERE (SELECT Count(*) FROM T_1 AS TA1 WHERE TA1.列1 = T_1.列1) > 1 AND (SELECT Count(*) FROM T_1 AS TA2 WHERE TA2.列1 = T_1.列1 AND TA2.列2 = T_1.列2) = 1; とか SELECT T_1.列1, T_1.列2 FROM T_1 WHERE T_1.列1 IN (SELECT 列1 FROM T_1 GROUP BY 列1 HAVING Count(*) > 1) AND T_1.列2 IN (SELECT 列2 FROM T_1 AS TA2 WHERE TA2.列1 = T_1.列1 GROUP BY 列2 HAVING Count(*) = 1); とか SELECT T_1.列1, T_1.列2 FROM (T_1 INNER JOIN (SELECT 列1 FROM T_1 GROUP BY 列1 HAVING Count(*) > 1) AS TA1 ON TA1.列1=T_1.列1) INNER JOIN (SELECT 列1, 列2 FROM T_1 GROUP BY 列1, 列2 HAVING Count(*) = 1) AS TA2 ON TA2.列1=T_1.列1 AND TA2.列2=T_1.列2; とか 1列目 2列目 A   2  A   3 A   3 B   4 C   4 C   5 C   5 で、 1列目 2列目 A   2  を期待しているのなら SELECT T_1.列1, T_1.列2 FROM T_1 WHERE (SELECT Count(*) FROM T_1 AS TA1 WHERE TA1.列1 = T_1.列1) > 1 AND (SELECT Count(*) FROM T_1 AS TA2 WHERE TA2.列2 = T_1.列2) = 1; とか SELECT T_1.列1, T_1.列2 FROM T_1 WHERE T_1.列1 IN (SELECT 列1 FROM T_1 GROUP BY 列1 HAVING Count(*) > 1) AND T_1.列2 IN (SELECT 列2 FROM T_1 GROUP BY 列2 HAVING Count(*) = 1); とか SELECT T_1.列1, T_1.列2 FROM (T_1 INNER JOIN (SELECT 列1 FROM T_1 GROUP BY 列1 HAVING Count(*) > 1) AS TA1 ON TA1.列1=T_1.列1) INNER JOIN (SELECT 列2 FROM T_1 GROUP BY 列2 HAVING Count(*) = 1) AS TA2 ON TA2.列2=T_1.列2; とか で、どうでしょうか。

その他の回答 (3)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

Q抽出は名前の重複したものからデータの重複したものを 取り除いた、というのがこのクエリの"あらすじ"です。 エラーは出ないと思いますが、出たらまた質問を。 集合論的にはおもしろい質問でした。 では。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

なかなか手強い質問ですが、一応まとめてみました。 データが格納されているテーブルをtblTとします。 テーブルにはID(主キー、オートナンバー)、 名前(テキスト型)、データ(数値型)のフィールド とします。名前にはA,A,B,C,C,C,D,D,E・・・など が入っています。データには2,,3,4,5,5,5,6,7,7・・ などがそれぞれ入っているとします。 クエリを三つ作ります。 Qデータの重複 SELECT tblT.名前, tblT.データ FROM tblT WHERE (((tblT.データ) In (SELECT [データ] FROM [tblT] As Tmp GROUP BY [データ] HAVING Count(*)>1 ))) ORDER BY tblT.データ; Q名前の重複 SELECT First(tblT.名前) AS 名前, Count(tblT.名前) AS 名前の重複個数 FROM tblT GROUP BY tblT.名前 HAVING (((Count(tblT.名前))>1)); Q抽出 SELECT DISTINCT Q名前の重複.名前 FROM Q名前の重複 WHERE (((Exists (SELECT * FROM Qデータの重複 WHERE Q名前の重複.名前= Qデータの重複.名前))=False)); これらのテーブル、クエリを設定したらQ抽出を実行 してください。望みの結果がえられると思います。

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

ABC 単位 A 2 A 3 B 4 C 5 C 5 C 5 で あるならば 以下のクエリを実行してください SELECT DISTINCT ABC,単位 from TEST 参考:  ■重複データの表示、非表示を切り替える - ALL句 、DISTINCT句 : SQL入門講座 http://www.accessclub.jp/sql/18.html ※ 質問する前に Google などで検索してください。   同じ質問がある場合が多いです。

参考URL:
http://www.accessclub.jp/sql/18.html

関連するQ&A