在访问查询中搜索过滤的重复项

时间:2013-03-10 09:33:53

标签: sql vba ms-access-2003

我在MSACCESS 2003中遇到以下问题

我有一个名为A_Gravur的查询,其中有3列 SP1,SP2,SP3

现在我想搜索重复项。

查询A_Gravur:

SP1 | SP2 | SP3

64 | CB75000 | 3

64 |空| d

70 | CB70010 | 1

70 | CB70010 | 1

119 | CB70050 | 5

119 |空| d

165 | S15002 | Schalter

165 | S15002 | Schalter

194 | R70034 |波季

194 | R10023 |电位

196 | S10063 | Schalter

196 | S10063 | Schalter

197 | S10063 | Schalter

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 | Schalter

165 | S15002 | Schalter

194 | R70034 |波季

194 | R10023 |电位

196 | S10063 | Schalter

196 | S10063 | Schalter


在第一次重复搜索中的结果太多了!它应该像这样过滤: 过滤(如果SP3中的一个结果是字母D然后不显示它) 过滤(IF [SP1和SP2] = [来自下一条记录的SP1和SP2]然后不显示它

第二步:从A_Gravur

过滤SP2中的重复项

SP1 | SP2 | SP3

64 | CB75000 | 3

199 | CB75000 | 5

196 | S10063 | Schalter

196 | S10063 | Schalter

197 | S10063 | Schalter


我的最终结果应该是这样的 它是SP1重复搜索的结果,带有过滤器+ SP2重复搜索


SP1 | SP2 | SP3

194 | R70034 | Poti 470k

194 | R10023 |电位

196 | S10063 | Schalter

197 | S10063 | Schalter

64 | CB75000 | 3

199 | CB75000 | 5


任何想法如何解决我的问题? 函数或SQL查询?

1 个答案:

答案 0 :(得分: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)是SQL Fiddle的MySQL语法。

在MS Access中,可以使用Format(SP1) & SP2 & SP3