sql "group by" один и тот же PersonID, разные PersonNames. Устранить дубликаты - PullRequest
1 голос
/ 07 ноября 2011

У меня есть (довольно грязный) источник данных (excel), который выглядит так:

ID | Имя | Тема | Оценка
123 | Смит, Джо Р. | МАТ | 2.0
123 | Смит, Джо Родригес | ФРАНЦУЗСКИЙ | 3,0
234 | Доу, Мэри Джейн Д. | БИОЛОГИЯ | 2.5
234 | Доу, Мэри Джейн Доусон | ХИМИЯ | 2.5
234 | Доу, Мэри Джейн | ФРАНЦУЗСКИЙ | 3,5

Вывод моего приложения должен выглядеть следующим образом:

Smith, Joe R.
123

MATH | 2.0
FRENCH | 3.0

Так что в основном я хочу сделать запрос (только для ID / Person родительского «контейнера») что-то вроде:

SELECT DISTINCT ID, Name FROM MyTable<br/>

или *
1013 *

SELECT ID, Name FROM MyTable GROUP BY ID


Конечно, оба из перечисленных выше недействительны и не будут работать.

Я хотел бы «объединить» один и тот же идентификатор и игнорировать / обрезать другие записи с одним и тем же идентификатором / другим именем (потому что мы все знаем, что это один и тот же человек, поскольку идентификатор является нашим идентификатором и, очевидно, это просто опечатка / грязные данные) .

Это можно сделать одним SELECT запросом?

Ответы [ 4 ]

1 голос
/ 07 ноября 2011

Если вам все равно, какое значение отображается в поле имени, используйте MAX() или MIN():

SELECT    ID,
          MAX(Name) AS Name
FROM      [YourTable]
GROUP BY  ID

Вотрабочий пример для игры: http://data.stackexchange.com/stackoverflow/q/116699/

0 голосов
/ 07 ноября 2011

Если вам все равно, какое имя вы сохраните, вы можете использовать агрегат MAX() или MIN(), чтобы выбрать только одно имя:

SELECT ID, MAX(Name) as Name 
FROM MyTable GROUP BY ID
0 голосов
/ 07 ноября 2011
SELECT A.ID, A.NAME, T.Subject, T.Grade
FROM (SELECT ID, MIN(NAME) AS NAME
      FROM MyTable
      GROUP BY ID) A
LEFT JOIN MyTable T on A.ID = T.ID

Даст вам что-то вроде

123    Smith, Joe R.     Math      2.0
123    Smith, Joe R.     FRENCH    3.0
234    Doe, Mary Jane    BIOLOGY   2.5
234    Doe, Mary Jane    CHEMISTRY 2.5
234    Doe, Mary Jane    FRENCH    3.5
0 голосов
/ 07 ноября 2011

Вы можете найти минимальное или максимальное значение имени

SELECT ID, Max(Name)
FROM MyTable
GROUP BY ID
...