SQL Server 2008选择查询难度

时间:2016-08-08 16:59:32

标签: sql sql-server select

我有一张超过10万条记录的表格。在这里我的问题,我有一堆列

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相同的所有记录,所以基本上你可以在上面的表格中看到,我有两次出现的Microsoft该表格具有相同的CompanyIDCompanyServiceID,但ServiceTypeID不同。

我需要能够搜索存在重复的所有记录。维护此数据的人非常混乱,并且没有正确更新某些列,因此我必须浏览所有记录并找到具有相同CompanyIDCompanyServiceID的记录的位置。

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

这些列都不是我的主键,我有一个记录编号增加1的列。

4 个答案:

答案 0 :(得分:2)

以下是使用row_number创建重复数据分组的一个选项:

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

答案 1 :(得分:2)

您可以尝试这样的事情:

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

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

答案 2 :(得分: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

答案 3 :(得分: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