Microsoft Access Cant删除包含Null值的重复项

时间:2012-02-07 14:35:12

标签: ms-access null duplicates

当某列中的值包含空值

时,我无法删除/查找重复项

这是我最初的标准

    In (SELECT [PQT] FROM [Departure] As Tmp GROUP BY [PQT],[IDNUSER],[Name]
    HAVING Count(*)>1  And [IDNUSER] = [Departure].[IDNUSER] And [Name] = [Departure].[Name])

例如,假设Name是可以包含空值的列,

我尝试用

替换它
And IIf(IsNull([Name]), " ", [Name]) = IIf(IsNull([Departure].[Name]), " ",
[Departure].[Name])

它似乎不起作用。 我也试过使用新西兰,没有成功

以下是我的表格包含的示例数据

**PQT**     **IDNUSER**      **Name**  
BNC          001              Bob  
BNC          001              Bob
BNC          002              
BNC          002              

我当前查询的结果 由于所有字段都具有值,因此IDNUSER 001的2个第一个数据被视为重复数据。 但IDNUSER 002不会被视为重复,因为Name中的值为null。 我希望我的查询能够找到所有重复项。

1 个答案:

答案 0 :(得分:3)

使用Departure表的样本数据,这是以下SELECT查询的输出。

PQT IDNUSER user_name num_matches
BNC 001     Bob                 2
BNC 002                         2

SELECT
    d.PQT,
    d.IDNUSER,
    Nz([Name]," ") AS user_name,
    Count(*) AS num_matches
FROM Departure AS d
GROUP BY
    d.PQT,
    d.IDNUSER,
    Nz([Name]," ");

但是你的问题提到删除重复项,所以我不知道此时还要做什么。我不知道如何区分2个鲍勃行...哪一个丢弃哪一个以及哪一个要保留。如果我们有一个唯一的列(例如主键)来区分它们,那将是可能的。或者,您可以将此GROUP BY查询的输出存储到另一个表中,其中Access UI称为“追加查询”。这种查询的模式与此类似:

INSERT INTO OtherTable (
    PQT,
    IDNUSER,
    user_name,
    num_matches
    )
SELECT
    d.PQT,
    d.IDNUSER,
    Nz([Name]," ") AS user_name,
    Count(*) AS num_matches
FROM Departure AS d
GROUP BY
    d.PQT,
    d.IDNUSER,
    Nz([Name]," ");

另请注意,我将IDNUSER = 002的两行合并为一行。这是我对你想要的最好的猜测。但是我倾向于要求Name列中的值---换句话说禁止Null。但是如果您需要允许Null并希望它们以不同方式处理,请告诉我们您想要的内容。

编辑:再看一遍,我看不出真正需要NZ()函数。即使组[名称]包含Null,此版本也会正确计算匹配。

SELECT
    d.PQT,
    d.IDNUSER,
    [Name] AS user_name,
    Count(*) AS num_matches
FROM Departure AS d
GROUP BY
    d.PQT,
    d.IDNUSER,
    [Name];