Sql 将标识应该相同的行的查询(除2个例外)
我们有一个客户表,如果一些客户可用于多个办公室,则会多次出现。如果有人多次添加客户,我希望能够运行一个报告,看看他们是否在每个位置都正确地添加了客户,但我真的不知道从哪里开始。这里有一个例子Sql 将标识应该相同的行的查询(除2个例外),sql,Sql,我们有一个客户表,如果一些客户可用于多个办公室,则会多次出现。如果有人多次添加客户,我希望能够运行一个报告,看看他们是否在每个位置都正确地添加了客户,但我真的不知道从哪里开始。这里有一个例子 UID, Office, CustomerCode, CUSTOMERNAME, CUSTOMERHEADOFFICEPHONE 001, Manchester, 123, 123 Supplied Ltd, 0161 123456 002,
UID, Office, CustomerCode, CUSTOMERNAME, CUSTOMERHEADOFFICEPHONE
001, Manchester, 123, 123 Supplied Ltd, 0161 123456
002, London, 123, 123 Suppls Ltd, 0161 123446
因此,我们可以从曼彻斯特和伦敦办事处向客户“123”销售产品。报告应关注CustomerCode,并确保每当出现“123”时,除UID(始终不同)、Office(当然不同)外,所有大写行都应相同。因此,报告会发现并非所有的客户姓名都是相同的,而且他们在CustomerHeadOfficePhone上也犯了一个错误。如果我有数千行,并且所有其他“多客户”都匹配,我希望我的报告只显示这两行。我该怎么做呢?我会试试:
select CustomerCode, CustomerName, CustomerHeadOfficePhone, count(*)
from TableName
group by CustomerCode, CustomerName, CustomerHeadOfficePhone
having count(*) > 1
这将列出每个出现的具有不同值的记录,如果要删除这些记录,则需要使用这些值。您可以通过使用DISTINCT缩短列表,并且可以通过围绕此列表的附加查询以更好的方式呈现UID。但是,您似乎只要求提供要修复的问题列表,我相信这会给您提供解决方案。确切的语法取决于您的SQL变体,但我认为您正在寻找一个GROUP BY,然后是HAVING子句。WHERE和HAVING是相似的,但是在返回行之前,HAVING在各个行上进行筛选,而HAVING在分组行之后进行筛选。因此,您可能需要COUNT(*)大于1或类似的值。如果你愿意的话,我可以给你一个答案,但你需要的似乎只是一个提示。谢谢你,我会草拟一些东西然后再给你