2012-01-06 131 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