SQL Server,根据列查找重复的行

时间:2018-05-07 08:52:51

标签: sql sql-server select

如果我有一个数据表如下:

  ID        Name         Birthday
------    --------     ------------
  01        Eric          06/20
  02        Judy          03/15
  03        Mary          04/01
  04        John          03/15
  05        Judy          06/20
  06        John          09/11

如何根据名称获得结果:

  ID        Name         Birthday
------    --------     ------------
  02        Judy          03/15
  04        John          03/15
  05        Judy          06/20
  06        John          09/11

因为朱迪和约翰都出现过不止一次(重复)。

以生日为基础:

  ID        Name         Birthday
------    --------     ------------
  01        Eric          06/20
  02        Judy          03/15
  04        John          03/15
  05        Judy          06/20

因为06/20和03/15都出现了不止一次!

3 个答案:

答案 0 :(得分:2)

您应该在SQL Server中查找WHERE,GROUP BY子句以及INNER查询和JOIN。 以下是MSDN文档的链接

https://docs.microsoft.com/en-us/sql/t-sql/queries/where-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql?view=sql-server-2017

使用GROUP BY和WHERE您对案例1的查询应为:

Select * from Tbl where Name in 
(
Select Name
from Tbl
Group by Name
HAVING COUNT(1)>1
)

同样第二个结果应该是:

Select * from Tbl where Birthday in 
(
Select Birthday
from Tbl
Group by Birthday
HAVING COUNT(1)>1
)

答案 1 :(得分:2)

基于姓名

select * from myTable where name in(
select Name from myTable group by Name having count(*)>1)

你可以对birtday进行一些小改动

这是SQL Fiddle链接,您可以在其中根据您的真实数据库更改表名称或字段数据类型

SQL Fiddle Link

答案 2 :(得分:1)

为什么不使用存在

select * 
from table t
where exists (select 1 
              from table 
              where Name = t.name 
              having count(1) > 1
             );

要根据Birthday获取日期,请在内部查询中使用Birthday列。