2016-08-08 98 views
2

我有一个超过100k记录的表。在这里我的问题,我有一堆列SQL Server 2008选择查询难度

CompanyID CompanyName CompanyServiceID ServiceTypeID Active 
---------------------------------------------------------------- 
1   Xerox  17     33    Yes 
2   Microsoft 19     39    Yes 
3   Oracle  22     54    Yes 
2   Microsoft 19     36    Yes 

的因此,这里是我的表的外观,它有大约30等栏目,但他们无关了这个问题。

这是我的困惑..我试图选择所有记录,其中CompanyIDCompanyServiceID是相同的,所以基本上你可以在上面的表格中看到,我有微软出现两次在表中,并具有相同CompanyIDCompanyServiceID,但不同ServiceTypeID

我需要能够搜索所有重复记录。维护这些数据的人非常混乱,没有正确更新某些列,因此我必须查看所有记录,并找到有相同记录的地方CompanyIDCompanyServiceID

有没有能够做到这一点的通用查询?

没有这些列的是我的主键,我有,通过1

回答

2

你可以尝试这样的事情:

SELECT CompanyName, COUNT(CompanyServiceID) 
    FROM //table name here 
    GROUP BY CompanyName 
    HAVING (COUNT(CompanyServiceID) > 1) 

这将返回多个条目的所有公司的分组列表。如果您还需要记录中的其他信息,则可以在SELECT语句中修改所需的列。

+0

谢谢,这工作得很好! – BobSki

2

下面是使用row_number创建复制数据分组一个选项,增加备案号列:

select * 
from (
    select *, 
     row_number() over (partition by companyId, companyserviceid 
          order by servicetypeid) rn 
    from yourtable 
) t 
where rn > 1 
1

另一个选项GROUP BY, HAVING and INNER JOIN

SELECT 
    * 
FROM 
Tbl A INNER JOIN 
(
    SELECT 
     CompanyID, 
     CompanyServiceID 
    FROM 
     Tbl 
    GROUP BY 
     CompanyID, 
     CompanyServiceID 
    HAVING COUNT(1) > 1 
) B ON A.CompanyID = B.CompanyID AND 
     A.CompanyServiceID = B.CompanyServiceID 
1

使用加入..

Select * 
from 
Yourtable t1 
join 
(
select companyid,companyserviceid,count(*) 
from 
Yourtable 
having count(*)>1)b 
on b.companyid=t1.companyid 
and b.companyserviceid=t1.companyserviceid