0

我在 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 | 沙尔特

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 中的一个结果是字母 D,则不显示它)过滤器(如果 [SP1 和 SP2] = [下一条记录中的 SP1 和 SP2] 然后不显示它

第二:从 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)是 SQL Fiddle 的 MySQL 语法。

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

于 2013-03-10T19:37:28.410 回答