选择没有DISTINCT值的行

时间:2014-06-11 20:04:22

标签: sql sql-server sql-server-2008

有人可以建议一种方法来选择没有列唯一值的行吗?

如果我有五条记录,其中一条记录具有CustNo = 7,1条记录具有CustNo = 9,三条记录具有CustNo = 11,我只想选择具有CustNo = 11的三行

5 个答案:

答案 0 :(得分:4)

这将在CustNo中找到重复的记录及其数量

Select CustNo, Count(*) From Table1
Group By CustNo
Having Count(*) > 1

完全解决方案的另一种方式(只有那些有重复项的完整记录),使用group和join

Select t1.*
From Table1  t1 inner join 
    (Select CustNo cn From Table1
     Group By CustNo
     Having Count(*) > 1) t2 On t1.CustNo = t2.cn

答案 1 :(得分:4)

显示所有不相同的行,您需要像这样的

子查询
select * from CustDetails
WHERE CustNo IN (SELECT CustNo from CustDetails 
                 group by CustNo 
                 having count(CustNo) > 1)

这是同一个

的sql小提琴

http://sqlfiddle.com/#!3/1c9a4/4

答案 2 :(得分:3)

这将检索所有重复记录:

SELECT CustNo FROM MyTable Group By CustNo Having COUNT(*) > 1

答案 3 :(得分:2)

只做一个SELECT/GROUP BY将只返回CustNo非唯一的记录的一行。但是,在子查询中实现它应该这样做。

如果我正确理解您的问题,那么这将返回CustomerTable中CustNo不唯一的行:

SELECT *
FROM CustomerTable
WHERE CustNo IN (
    SELECT CustNo
    FROM CustomerTable
    GROUP BY CustNo
    HAVING COUNT(*) > 1)

答案 4 :(得分:0)

如果需要获取重复行的完整行,请使用窗口函数:

select t.*
from (select t.*, count(*) over (partition by CustNo) as cnt
      from table t
     ) t
where cnt > 1;
相关问题