2012-01-06 95 views
0

我有一个没有真正规范化的数据库,所以我回去尝试使它更好一点。现在我们有以下列:清理数据库记录

FirstName | LastName | SchoolYear | Grade | SchoolId | Games Played 
Bob  | Smith | 2010  | Fr | 245  | 3 
Tina  | Johnson | 2010  | So | 2894  | 10 
Bob  | Smith | 2010  | Fr | 245  | 3 

我如何找到有2人同名,学年,年级和学校ID的学校?他们看起来像数据库中的副本(所有列都是相同的),但每个玩家只有一行游戏每年玩。这就是我知道学校里有类似的人,会有两行信息相同。

我正在使用SQL Server 2008

谢谢!

+1

规范化是关于不重复数据库中的列而不是数据库中的数据。 – KevinDTimm 2012-01-06 18:29:07

回答

1

如果我正确理解你的问题,这个查询:

SELECT FirstName, LastName, SchoolYear, Grade, SchoolId 
FROM <your table> 
GROUP BY FirstName, LastName, SchoolYear, Grade, SchoolId 
HAVING COUNT(*) > 1 

这将基本上找到所有的(名字,姓氏,学年,年级,SchoolId)中存在的多套一个记录。

如果你只在上面记录SchoolId的兴趣,然后一起去:

SELECT DISTINCT SchoolId 
FROM <your table> 
GROUP BY FirstName, LastName, SchoolYear, Grade, SchoolId 
HAVING COUNT(*) > 1 
0
select count(*), FirstName, LastName, SchoolYear, Grade, SchoolId 
from mytable 
group by FirstName, LastName, SchoolYear, Grade, SchoolId 
order by 1 desc 
+0

还有一个HAVING条款 - 请注意,您可能有一些条目超过2例如... – Randy 2012-01-06 18:29:08

1
select FirstName, LastName, SchoolYear, Grade, SchoolId 
from Student 
group by FirstName, LastName, SchoolYear, Grade, SchoolId 
having count(*) > 1 
1

简单GROUP BYHAVING应该做的:

SELECT SchoolId 
FROM YourTable 
GROUP BY FirstName, LastName, SchoolYear, Grade, SchoolId, [Games Played] 
HAVING COUNT(*) = 2 

请注意,您可能需要使用HAVING COUNT(*) > 1如果你想找到所有重复学生的学校。

1
SELECT FirstName, 
     LastName, 
     SchoolYear, 
     Grade, 
     SchoolId, 
     (CASE WHEN COUNT(*) > 1 THEN 'Yes' ELSE 'No' END) AS 'Repeat?' 
FROM <table_name> 
GROUP BY FirstName, LastName, SchoolYear, Grade, SchoolId 
+0

感谢案例,我一直在努力 – 2012-01-06 18:59:40