0

MSACCESS2003で次の問題が発生します

SP1、SP2、SP3の3列のA_Gravurというクエリがあります

今、私は重複を検索したいと思います。

クエリA_Gravur:

SP1 | SP2 | SP3

64 | CB75000 | 3

64 | 空| D

70 | CB70010 | 1

70 | CB70010 | 1

119 | CB70050 | 5

119 | 空| D

165 | S15002 | シャルター

165 | S15002 | シャルター

194 | R70034 | ポティ

194 | R10023 | ポテンショメータ

196 | S10063 | シャルター

196 | S10063 | シャルター

197 | S10063 | シャルター

198 | S10070 | 3

199 | CB75000 | 5


最初:A_GravurからのSP1の重複をフィルタリングします

結果:

SP1 | SP2 | SP3

64 | CB75000 | 3

64 | 空| D

70 | CB70010 | 1

70 | CB70010 | 1

119 | CB70050 | 5

119 | 空| D

165 | S15002 | シャルター

165 | S15002 | シャルター

194 | R70034 | ポティ

194 | R10023 | ポテンショメータ

196 | S10063 | シャルター

196 | S10063 | シャルター


最初の重複検索では、結果が多すぎます。次のようにフィルタリングする必要があります。フィルタ(SP3の結果の1つが文字Dの場合、表示しない)フィルタ([SP1およびSP2] = [次のレコードのSP1およびSP2]の場合、表示しない

2番目:A_GravurからのSP2での重複のフィルター

SP1 | SP2 | SP3

64 | CB75000 | 3

199 | CB75000 | 5

196 | S10063 | シャルター

196 | S10063 | シャルター

197 | S10063 | シャルター


最終結果は次のようになります。これは、フィルターを使用したSP1重複検索+SP2重複検索の結果です。


SP1 | SP2 | SP3

194 | R70034 | ポティ470k

194 | R10023 | ポテンショメータ

196 | S10063 | シャルター

197 | S10063 | シャルター

64 | CB75000 | 3

199 | CB75000 | 5


私の問題を解決する方法はありますか?関数またはSQLクエリ?

4

1 に答える 1

0

このSQLクエリはあなたが望むものを与えると思います:

SELECT SP1, SP2, SP3
  FROM A_Gravur
  WHERE (SP1 IN
    (SELECT SP1
      FROM A_Gravur
      WHERE SP3<>'D'
      GROUP BY SP1
      HAVING COUNT(*)>1)
  OR SP2 IN
    (SELECT SP2
      FROM A_Gravur
      WHERE SP3<>'D'
      GROUP BY SP2
      HAVING COUNT(*)>1))
  AND SP3<>'D'
  ORDER BY SP1, SP2;

`これはhttp://sqlfiddle.com/#!2/7351d/16で遊ぶことができます

完全に重複している行を削除するには、より複雑になります。

SELECT SP1, SP2, SP3
  FROM A_Gravur
  WHERE (SP1 IN
    (SELECT SP1
      FROM A_Gravur
      WHERE SP3<>'D'
      GROUP BY SP1
      HAVING COUNT(*)>1)
  OR SP2 IN
    (SELECT SP2
      FROM A_Gravur
      WHERE SP3<>'D'
      GROUP BY SP2
      HAVING COUNT(*)>1))
  AND CONCAT(CAST(SP1 AS CHAR),SP2,SP3) NOT IN
    (SELECT CONCAT(CAST(SP1 AS CHAR),SP2,SP3)
      FROM A_Gravur
      WHERE SP3 <> 'D'
      GROUP BY CONCAT(CAST(SP1 AS CHAR),SP2,SP3)
      HAVING COUNT(*)>1)
  AND SP3<>'D'
  ORDER BY SP1, SP2;

これはhttp://sqlfiddle.com/#!2/7351d/35で見つけることができます

CONCAT(CAST(SP1 AS CHAR),SP2,SP3)これがSQLFiddleのMySQL構文であることに注意してください。

MS Accessでは、Format(SP1) & SP2 & SP3

于 2013-03-10T19:37:28.410 に答える