我在MSACCESS 2003中遇到以下问题
我有一个名为A_Gravur的查询,其中有3列 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中的重复项
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]然后不显示它
64 | CB75000 | 3
199 | CB75000 | 5
196 | S10063 | Schalter
196 | S10063 | Schalter
197 | S10063 | Schalter
我的最终结果应该是这样的 它是SP1重复搜索的结果,带有过滤器+ SP2重复搜索
194 | R70034 | Poti 470k
194 | R10023 |电位
196 | S10063 | Schalter
197 | S10063 | Schalter
64 | CB75000 | 3
199 | CB75000 | 5
任何想法如何解决我的问题? 函数或SQL查询?
答案 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