Очистить записи базы данных - PullRequest
0 голосов
/ 06 января 2012

У меня есть база данных, которая не имеет реальной нормализации, поэтому я возвращаюсь и пытаюсь сделать ее немного лучше. Прямо сейчас у нас есть следующие столбцы:

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 человека с одинаковым именем, учебным годом, классом и школьным идентификатором? Они будут выглядеть как дубликаты в базе данных (все столбцы будут одинаковыми), но у каждого игрока есть только один ряд с играми, сыгранными за каждый год. Вот откуда я знаю, что в школе есть похожие люди, там будет 2 строки с одинаковой информацией.

Я использую SQL Server 2008

Спасибо!

Ответы [ 5 ]

1 голос
/ 06 января 2012
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
1 голос
/ 06 января 2012

Простые GROUP BY и HAVING должны сделать:

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

Обратите внимание, что вы можете использовать HAVING COUNT(*) > 1, если хотите найти все школы с дублирующимися учениками.

1 голос
/ 06 января 2012
select FirstName, LastName, SchoolYear, Grade, SchoolId
from Student
group by FirstName, LastName, SchoolYear, Grade, SchoolId
having count(*) > 1
1 голос
/ 06 января 2012

Если я правильно понимаю ваш вопрос, этот запрос:

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

Это в основном найдет все наборы (FirstName, LastName, SchoolYear, Grade, SchoolId), которые существуют в более чем одной записи.

Если вас интересуют только SchoolId из вышеприведенных записей, тогда переходите к:

SELECT DISTINCT SchoolId
FROM <your table>
GROUP BY FirstName, LastName, SchoolYear, Grade, SchoolId
HAVING COUNT(*) > 1
0 голосов
/ 06 января 2012
select count(*), FirstName, LastName, SchoolYear, Grade, SchoolId
from mytable
group by FirstName, LastName, SchoolYear, Grade, SchoolId
order by 1 desc
...