使用COUNT / Group By时需要选择所有列

时间:2012-05-08 02:10:35

标签: sql sql-server database group-by

好的,我有一张表,其中一列有一些FEW REPEATING记录。

我的任务是选择包含所有属性的REPEATING记录。

CustID FN LN DOB城市州

DOB有一些重复值,我需要从整个表中选择并列出DOB字段中相同的所有记录的所有列。

我的尝试...

Select  DOB, COUNT(DOB) As 'SameDOB' from Table1

group by DOB

HAVING (COUNT(DOB) > 1)

这只返回两列,一行第一列是多次出现的DOB列,第二列给出了多少列。

我需要找出一种方法来列出所有属性而不仅仅是这两个......

请指导我正确的方向。

4 个答案:

答案 0 :(得分:14)

我认为更通用的解决方案是使用Windows函数:

select *
from (select *, count(*) over (partition by dob) as NumDOB
      from table
     ) t
where numDOB > 1

这更通用的原因是因为很容易在两列或更多列中更改为重复项。

答案 1 :(得分:9)

Select * 
FROM  Table1 T
WHERE T.DOB IN( Select   I.DOB
                FROM     Table1 I
                GROUP BY I.DOB
                HAVING   COUNT(I.DOB) > 1)

答案 2 :(得分:4)

尝试加入子查询,这也可以让你看到计数

select t.*, a.SameDOB from Table1 t
join (
  Select  DOB, COUNT(DOB) As 'SameDOB' from Table1 
  group by DOB 
  HAVING (COUNT(DOB) > 1) 
) a on a.dob = t.dob

答案 3 :(得分:-1)

select * 
from table1, (select count(*) from table1) as cnt