这很令人愤怒,因为应该有一些简单的方法来做到这一点,但似乎没有。
我有一个巨大的查询,有几个字段和许多行,其中一列包含一封用户电子邮件。
然而,有时也会出现重复——两行具有相同的电子邮件(并且行中可能有一些或所有其他字段不同或相同,等等)。
我消除哪一行并不重要,但我想消除任何有重复电子邮件的行。我只想确保一封电子邮件在整个查询中显示一次。
例如,如果我有
A A A A Email1
A B A A Email1
K D S F Email1
A A K A Email2
A A K A Email2
A B B A Email2
A C D A Email2
A B B A Email2
K A V D Email2
其中字母=任意字段,电子邮件#表示电子邮件,那么我需要它转到
A A A A Email1
A A K A Email2
这可以在MS Access中完成吗?
考虑在WHERE
子句中使用聚合子查询:
SELECT t.Fld1, t.Fld2, t.Fld3, t.Fld4, t.Email
FROM TableName As t
WHERE t.ID IN
(SELECT Min(sub.ID)
FROM TableName As sub
GROUP BY sub.Email);
-- Fld1 Fld2 Fld3 Fld4 Email
-- A A A A Email1
-- A A K A Email2
另一种选择是使用MS Access的First()聚合函数,但请注意警告:
因为记录通常不按特定顺序返回(除非查询包括ORDERBY子句)函数将是任意的。
SELECT First(t.Fld1) AS First_Fld1, First(t.Fld2) AS First_Fld2,
First(t.Fld3) AS First_Fld3, First(t.Fd4) AS First_Fld4,
t.Email
FROM TableName As t
GROUP BY t.Email
ORDER BY t.ID;