当某列中的值包含空值
时,我无法删除/查找重复项这是我最初的标准
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。 我希望我的查询能够找到所有重复项。
答案 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];