MS Access-在不使用SQL Min / Max的情况下保留三项结果的同时删除基于三列的重复项

ivkovmg

我现在遇到一个问题已经有一段时间了,找不到适合我的解决方案。可能是我没有正确执行操作,或者有其他方法可以更好地工作。我对任何想法都很开放,也很感激。

我在访问中有一个表(tblDocQueue),类似于下面显示的表。数据来自我们在工作中使用的较旧应用程序的数据摘录,因此无法更改源或摘录。我们将数据上传到Access,以分析和建立围绕它的指标。下表如下:

ID DocName OwnerName AccountNum DocRef
1 Doc 1 Matt 1001 Z0005638
2 Doc 1 Matt 1002 Z0005638
3 Doc 1 Tony 5010 Z0005639
4 Doc 2 Luke 1050 Z0005640
5 Doc 3 Luke 1050 Z0005641
6 Doc 3 Gary 1234 Z0005641
7 Doc 4 John 8789 Z0005642
8 Doc Ed 8789 Z0005642
9 Doc 5 Ed 8790 Z0005643
10 Doc 5 Connie 4579 Z0005644
11 Doc 6 Mary 3616 Z0005645
12 Doc 6 Lucy 4795 Z0005646
13 Doc 6 Tina 4795 Z0005646
14 Doc 7 Matt 1001 Z0005638
15 Doc 7约翰8789 Z0005647

列数比列出的数更多,但它们与问题无关。我试图基于三列(DocName,OwnerName,Doc Ref)删除重复项,并保留一个唯一值。我使用以下SQL进行了此操作,但是开始要花费几个小时(最多7个)来处理大约500,000行数据。我不确定效率问题是由于使用最小/最大还是其他原因引起的

SELECT tblDocQueue.ID AS Expr1, tblDocQueue.DocName AS Expr2,
    tblDocQueue.OwnerName AS Expr3, tblDocQueue.AcctNo AS Expr4,
    tblDocQueue.ExpDate AS Expr5, tblDocQueue.EffectiveDate AS Expr6,
    tblDocQueue.SignatureDate AS Expr7, tblDocQueue.DocBNYSts AS Expr8,
    tblDocQueue.StsDate AS Expr9, tblDocQueue.UserSts AS Expr10,
    tblDocQueue.Location AS Expr11, tblDocQueue.Ackngmt AS Expr12,
    tblDocQueue.OPID AS Expr13, tblDocQueue.Comments AS Expr14,
    tblDocQueue.DocRef AS Expr15, tblDocQueue.ExternalComment AS Expr16,
    tblDocQueue.FirstName AS Expr17, tblDocQueue.LastName AS Expr18,
    tblDocQueue.ClientID AS Expr19, tblDocQueue.Address AS Expr20,
    tblDocQueue.CountryCode AS Expr21
FROM tblDocQueue
WHERE ((([tblDocQueue].[ID])=(
    SELECT Min(t.[ID]) 
    FROM [tblDocQueue] AS t 
    WHERE t.[DocRef]=[tblDocQueue].[DocRef] 
     AND t.[DocName]=[tblDocQueue].[DocName])));

这对于企业团队来说是无法接受的。然后,我在VBA中开发了一种解决方法,可以使用excel中预装的removeplicates函数将数据导出到excel文件,然后将唯一数据导入到另一个表中。在excel中只需几秒钟。随着该数据库的使用开始扩大,并且我将以类似的方式每天删除数百个数据集的重复项,因此我试图在不使用上述变通方法的情况下使它工作。

以上示例数据的预期结果将是:

ID DocName OwnerName帐户编号DocRef
1 Doc 1 Matt 1001 Z0005638
3 Doc 1 Tony 5010 Z0005639
4 Doc 2 Luke 1050 Z0005640
5 Doc 3 Luke 1050 Z0005641
6 Doc 3 Gary 1234 Z0005641
7 Doc 4 John 8789 Z0005642
8 Doc 5 Ed 8789 Z0005642
9 Doc 5 Ed 8790 Z0005643
10 Doc 5 Connie 4579 Z0005644
11 Doc 6 Mary 3616 Z0005645
12 Doc 6 Lucy 4795 Z0005646
13 Doc 6 Tina 4795 Z0005646
14 Doc 7 Matt 1001 Z0005638
15 Doc 7 John 8789 Z0005647

如果有人可以通过SQL帮助我:

  1. 根据三列有条件地删除重复值
  2. 使用Microsoft Access 2010
  3. 同时保留每个唯一值的一行
  4. 以某种有效的方式/不需要很长的时间(最多5,000,000条记录的表)

任何帮助都将不胜感激!

完美的

考虑一个简单的聚合查询,将其分组在您需要不同的DocNameOwnerNameDocRef的列上然后,使用IDAccountNumMin()中的ID其中还包括所有其他列:

SELECT Min(tblDocQueue.ID) AS MinOfID, 
       tblDocQueue.DocName, 
       tblDocQueue.OwnerName, 
       Min(tblDocQueue.AccountNum) AS MinOfAccountNum, 
       tblDocQueue.DocRef
FROM tblDocQueue
GROUP BY tblDocQueue.DocName, 
         tblDocQueue.OwnerName, 
         tblDocQueue.DocRef
ORDER BY Min(tblDocQueue.ID);

输出

MinOfID   DocName   OwnerName   MinOfAccountNum DocRef
1         Doc 1     Matt        1001            Z0005638
3         Doc 1     Tony        5010            Z0005639
4         Doc 2     Luke        1050            Z0005640
5         Doc 3     Luke        1050            Z0005641
6         Doc 3     Gary        1234            Z0005641
7         Doc 4     John        8789            Z0005642
8         Doc 5     Ed          8789            Z0005642
9         Doc 5     Ed          8790            Z0005643
10        Doc 5     Connie      4579            Z0005644
11        Doc 6     Mary        3616            Z0005645
12        Doc 6     Lucy        4795            Z0005646
13        Doc 6     Tina        4795            Z0005646
14        Doc 7     Matt        1001            Z0005638
15        Doc 7     John        8789            Z0005647

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在不使用Max或Min的情况下,在ms sql中选择每组的前1条记录

来自分类Dev

MS Access SQL查询表并删除重复项

来自分类Dev

MS Access INSERT不使用输入

来自分类Dev

在不使用min()的情况下找到MIN

来自分类Dev

如何在不使用MS SQL中的SubQuery的情况下比较Max(Count(*))值?

来自分类Dev

如何使用 SQL 删除 MS Access DB 中的重复行

来自分类Dev

如何在不使用MS WORD中使用“查找和替换”的情况下查找是否有重复项

来自分类Dev

在MS Access中使用Excel VBA进行SQL删除

来自分类Dev

MS Access SQL错误

来自分类Dev

在不使用Visual Studio的情况下获取MS SQL Server连接字符串?

来自分类Dev

MS SQL 2008:使用多个没有PK的列删除“重复项”以选择最新结果

来自分类Dev

如何在不使用 MS SQL 中的 JOIN 的情况下检索所有链接的行和列

来自分类Dev

如何在不使用Distinct的情况下删除SQL查询中的重复项?

来自分类Dev

如何删除MS ACCESS中的两个重复项

来自分类Dev

使用MS Access插入SQL Server

来自分类Dev

使用MS Access插入SQL Server

来自分类Dev

MS Access SQL顺序更新

来自分类Dev

MS Access SQL插入查询

来自分类Dev

MS ACCESS SQL连接语法

来自分类Dev

MS Access SQL计算从多行

来自分类Dev

导出MS Access 2010 SQL

来自分类Dev

SQL MS Access 2013年

来自分类Dev

ms-access SQL链接工作表行顺序保留

来自分类Dev

MS-ACCESS / SQL-如何在多种情况下应用where子句

来自分类Dev

在SQL MS Access中添加Max(Count(column))

来自分类Dev

如何在MS Access中的日期字段使用NULL值的情况下使用LIKE

来自分类Dev

MS Access 2010 SQL选择进入计算列问题

来自分类Dev

SQL MS-Access为多个列选择不同

来自分类Dev

SQL MS-Access为多个列选择不同

Related 相关文章

热门标签

归档