我有一张超过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个其他列,但它们与这个问题无关。
这是我的窘境......我正在尝试选择CompanyID
和CompanyServiceID
相同的所有记录,所以基本上你可以在上面的表格中看到,我有两次出现的Microsoft该表格具有相同的CompanyID
和CompanyServiceID
,但ServiceTypeID
不同。
我需要能够搜索存在重复的所有记录。维护此数据的人非常混乱,并且没有正确更新某些列,因此我必须浏览所有记录并找到具有相同CompanyID
和CompanyServiceID
的记录的位置。
是否有能够做到这一点的通用查询?
这些列都不是我的主键,我有一个记录编号增加1的列。
答案 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