2016-08-08 134 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