searching for filtered duplicates in access query

旧城冷巷雨未停 提交于 2019-12-12 04:39:56

问题


i have the following problem in MSACCESS 2003

i have a query called A_Gravur which 3 columns SP1, SP2, SP3

now i want to search for duplicates.

query A_Gravur:

SP1 | SP2 | SP3

64 | CB75000 | 3

64 | empty | D

70 | CB70010 | 1

70 | CB70010 | 1

119 | CB70050 | 5

119 | empty | D

165 | S15002 | Schalter

165 | S15002 | Schalter

194 | R70034 | Poti

194 | R10023 | Potentiometer

196 | S10063 | Schalter

196 | S10063 | Schalter

197 | S10063 | Schalter

198 | S10070 | 3

199 | CB75000 | 5


first: filter duplicates in SP1 from A_Gravur

result:

SP1 | SP2 | SP3

64 | CB75000 | 3

64 | empty | D

70 | CB70010 | 1

70 | CB70010 | 1

119 | CB70050 | 5

119 | empty | D

165 | S15002 | Schalter

165 | S15002 | Schalter

194 | R70034 | Poti

194 | R10023 | Potentiometer

196 | S10063 | Schalter

196 | S10063 | Schalter


in the first duplicate search are too many results! it should be filtered like this: Filter (IF one result in SP3 is letter D then dont show it) Filter (IF [SP1 and SP2] = [SP1 and SP2 from next record] then dont show it

Second: filter duplicates in SP2 from A_Gravur

SP1 | SP2 | SP3

64 | CB75000 | 3

199 | CB75000 | 5

196 | S10063 | Schalter

196 | S10063 | Schalter

197 | S10063 | Schalter


my final result should look like this it is the result from SP1 duplicate search with filter + SP2 duplicate search


SP1 | SP2 | SP3

194 | R70034 | Poti 470k

194 | R10023 | Potentiometer

196 | S10063 | Schalter

197 | S10063 | Schalter

64 | CB75000 | 3

199 | CB75000 | 5


any idea how to solve my problem? a function or a sql query?


回答1:


I think this SQL query will give you what you want :

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;

` You can play with this at http://sqlfiddle.com/#!2/7351d/16

To eliminate the lines entirely duplicated, it becomes more complicated :

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;

This can be found at http://sqlfiddle.com/#!2/7351d/35

Note that CONCAT(CAST(SP1 AS CHAR),SP2,SP3) is MySQL syntax for SQL Fiddle.

In MS Access, one would use Format(SP1) & SP2 & SP3



来源:https://stackoverflow.com/questions/15320798/searching-for-filtered-duplicates-in-access-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!