2010-04-28 64 views
2

我知道这个表中有重复的账号,但是这个查询没有返回任何结果。SQL Query查找重复项没有返回任何结果

SELECT [CARD NUMBER],[客户名称],[ACCT NBR 1],[ACCT NBR 2],

COUNT([ACCT NBR 1])AS NumOccurences

FROM DebitCardData。 。DBO [ 'ATM检查Accts - 主动$']

GROUP BY [卡号],[客户名称],[ACCT NBR 1],[ACCT NBR 2]

HAVING(COUNT([ACCT NBR 1])> 1)

回答

1

我认为这是在查询中没有错误,但是这一点可能对你

SELECT [CARD NUMBER],[CUSTOMER NAME],[ACCT NBR 1],[ACCT NBR 2], 

NumOccurences 

FROM DebitCardData.dbo.['ATM Checking Accts - Active$'] as accMailTbl 

inner join 

(SELECT [ACCT NBR 1],COUNT([ACCT NBR 1]) AS NumOccurences 

FROM DebitCardData.dbo.['ATM Checking Accts - Active$'] 

GROUP BY [ACCT NBR 1] HAVING (COUNT([ACCT NBR 1])>1)) accTbl 

on accTbl.[ACCT NBR 1]=accMailTbl.[ACCT NBR 1] 
0

查询看起来正确,据我所知。向我们展示一些重复数据的行,并且我可以建议查询来查找它们。

2

也许通过“重复帐号”您是指ACCT NBR 1ACCT NBR 2(对于相同或不同的记录)中的数字?您的查询不会发现这种情况。

0

工作中的问题,是你的数据不被标准化。您可以使用下面的查询来查找重复的帐号,您可以将结果放置或嵌套到子查询中,以返回原始数据以获取客户名称和卡号。您的查询存在的另一个问题是您将卡号和名称包含在组中,这意味着如果两个不同的人或卡共享一个帐号,则您将无法检测到该卡号。

编辑:这实际上是我在重复搜索时发现的一种非常常见的模式。您必须通过仅在要查找重复项的列上进行分组来检测重复项,然后必须将其嵌套在子查询中或加入以返回并查明其他数据是相关的。

Select AccountNumber From 
    (Select [CARD NUMBER],[CUSTOMER NAME],[ACCT NBR 1] as AccountNumber 
     From DebitCardData.dbo.['ATM Checking Accts - Active$'] 
    UNION 
    Select [CARD NUMBER],[CUSTOMER NAME],[ACCT NBR 2] as AccountNumber 
     From DebitCardData.dbo.['ATM Checking Accts - Active$'] 
) as NormalizedDebitCardData 
GroupBy AccountNumber 
Having Count(*)>1 

要返回结果中的所有其他列:

Select [CARD NUMBER],[CUSTOMER NAME],[ACCT NBR 1], [ACCT NBR 2] 
From DebitCardData.dbo.['ATM Checking Accts - Active$'] 
Inner Join 
    (Select AccountNumber From 
     (Select [CARD NUMBER],[CUSTOMER NAME],[ACCT NBR 1] as AccountNumber 
      From DebitCardData.dbo.['ATM Checking Accts - Active$'] 
     UNION 
     Select [CARD NUMBER],[CUSTOMER NAME],[ACCT NBR 2] as AccountNumber 
      From DebitCardData.dbo.['ATM Checking Accts - Active$'] 
    ) as NormalizedDebitCardData 
    Group By AccountNumber 
    Having Count(*)>1) as AccountNumberDuplicates 
On AccountNumberDuplicates.AccountNumber = [ACCT NBR 1] or AccountNumberDuplicates.AccountNumber = [ACCT NBR 2] 
Order By AccountNumberDuplicates.AccountNumber