2

我有下表名为“flt”

您可以看到重复项仅由 3 列标识(flight, fltno, stad)......我不在乎col1 and col2.. 但我应该能够在查询中显示它。

所以..你可以看到ids 8, 3 and 10重复的。

我想编写一个纯 SQL 查询...可以执行以下操作:

1)duplicate count列..它基本上计算有多少记录与flight, fltno, stad当前选定的行匹配。

2)对"duplicate rank"重复项进行排序的列.. 1 表示第一条记录,2 表示这是第二条记录,3 表示这是第三条记录。您可以看到ba 104总共有 2 条记录......并且它排名第 1 和第 2。

3)从结果(可能是可编辑的)查询中......我应该能够过滤掉(使用where)所有重复的排名> 1......然后能够删除这些记录。所以.. id 8, 3 and 10 are > 1.. 我应该可以在这个查询中删除它们...通过单击行和删除键。

如果条件3不能完全实现..请给我最好的方法。谢谢。

在此处输入图像描述

4

3 回答 3

1

此 SQL 将根据您的问题为您提供结果,但是它不能作为 DELETE 查询的一部分工作,我建议从此查询中选择一个临时表,然后从中运行一个 DELETE 查询:)

SELECT A.id, A.flight, A.fltno, A.stad, A.col1, A.col2, B.concount AS [duplicate count], (SELECT Count(C.id) FROM tblfit As C WHERE C.flight&C.fltno&C.stad=A.concat AND C.id <= A.id) AS [duplicate rank]
FROM (SELECT tblfit.*, [flight] & [fltno] & [stad] AS concat
FROM tblfit) AS A,
(SELECT [flight] & [fltno] & [stad] AS concat, Count([concat]) AS concount
FROM tblfit
GROUP BY [flight] & [fltno] & [stad]) AS B
WHERE A.concat = B.concat;
于 2013-06-14T14:40:30.023 回答
0

在表中添加了一个值始终为 1 的列,称为

countValue

然后重复计数的第一个查询是

SELECT tableA.flight, tableA.fltno, tableA.stad, Sum(tableA.countValue) AS duplicateCount
FROM tableA
GROUP BY tableA.flight, tableA.fltno, tableA.stad;

然后重复排名的第二个查询(按 id 号排名)是

SELECT (SELECT Count(*)+1 FROM tableA WHERE id < temp.id AND stad = temp.stad AND flight = temp.flight AND fltno = temp.fltno) AS flightRank, temp.id, temp.flight, temp.fltno, temp.stad
FROM tableA AS temp;

然后你可以加入他们

SELECT tableA.id, tableA.flight, tableA.fltno, tableA.stad, tableA.col1, tableA.col2, queryCounts.duplicateCount, queryRanking.flightRank
FROM (tableA INNER JOIN queryRanking ON tableA.id = queryRanking.id) INNER JOIN queryCounts ON (tableA.stad = queryCounts.stad) AND (tableA.fltno = queryCounts.fltno) AND (tableA.flight = queryCounts.flight);

然后关于删除查询阅读此线程,因为您需要使用连接删除

使用 JOIN 时如何在 MS Access 中删除?

于 2013-06-14T13:28:19.277 回答
0

这将解决问题 1。我不相信所有 3 个问题都可以在同一个查询中得到回答。

Select Flight, FltNo, Stad, Sum(1) as DupCnt
from FLT
Group By Flight, FltNo, Stad
order by Sum(1) DESC

你怎么知道你要删除 8 和 3,而不是 4 和 10?

于 2013-06-14T13:30:16.787 回答