SQL选择重复值而不分组

时间:2016-05-13 14:37:29

标签: sql-server

我已经检查了所有相关问题,但无法准确找到我需要的内容。

我需要返回每个记录中某个特定字段相同的任何数据,但我无法使用group by,因为我需要查看所有重复的记录,我不仅仅是想要数一数。

我尝试过使用group byhaving count(field) > 1以及各种形式的简单select以及其他尝试使用count()但没有运气的方式。

基本上我需要看到表中的所有内容,除了一个特定字段具有唯一值的位置。如果它不是唯一的,我需要查看它。

还有其他where要求,但为了简单起见,我不在此处。我正在使用SSMS 2008 R2。

由于

示例:

数据:

Col1  |  Col2  |  Col3
----------------------
abc      wow      13/05/2016
abc      wow      10/05/2016
def      wow      13/05/2016
ghi      wow      13/05/2016
ghi      wow      10/05/2016
jkl      wow      01/01/2016

预期结果:

Col1  |  Col2  |  Col3
----------------------
abc      wow      13/05/2016
abc      wow      10/05/2016
ghi      wow      13/05/2016
ghi      wow      10/05/2016

我希望在Col1中显示任何没有唯一值的内容

2 个答案:

答案 0 :(得分:3)

您可以使用以下查询:

SELECT Col1, Col2, Col3
FROM (
  SELECT Col1, Col2, Col3,
         COUNT(*) OVER (PARTITION BY Col1) AS cnt
  FROM mytable) AS t
WHERE t.cnt > 1

查询使用COUNT聚合函数的窗口版本:该函数应用于Col1个分区。外部查询过滤掉Col1值只出现一次的记录。

答案 1 :(得分:1)

目前还不是很清楚你想要做什么,但也许这就是你想要的东西?

with MyDupes as
(
    Select MyColumnWithDupes
        , COUNT(*) as RowCount
    from SomeTable
    Group by MyColumnWithDupes
)

select *
from SomeTable st
join MyDupes md on md.MyColumnWithDupes = st.MyColumnWithDupes
where md.RowCount > 1