2011-11-07 70 views
1

我有一個(相當髒)的數據源(excel),看起來像這樣:sql「group by」相同的PersonID,不同的PersonNames。消除重複

ID |名稱|主題|等級
123 |史密斯,喬R. | MATH | 2.0
123 |史密斯,喬羅德里格斯|法語| 3.0
234 | Doe,Mary Jane D. |生物學| 2.5
234 | Doe,Mary Jane Dawson |化學| 2.5
234 | Doe,Mary Jane |法語| 3.5

我的應用程序的輸出應該是這樣的:

Smith, Joe R. 
123 

MATH | 2.0 
FRENCH | 3.0 

所以基本上我想要做的查詢(只是爲ID /人父 '容器')是這樣的:

SELECT DISTINCT ID, Name FROM MyTable<br/> 


SELECT ID, Name FROM MyTable GROUP BY ID 


當然b的以上的其中一項是無效的,將不起作用。


我想「結合」相同的ID並忽略/截斷具有相同ID /不同名稱的其他記錄(因爲我們都知道它們是同一個人,因爲ID是我們的標識符,顯然它只是一個錯字/髒數據)。

這可以通過一個單一的SELECT查詢嗎?

+0

有你的問題標籤是他們的一部分的輸入/輸出或試圖格式化這個問題? – Mark

回答

1

的MIN或MAX值如果你真的不關心它的值在名稱字段顯示出來,用MAX()MIN()

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

這裏的一個可玩的例子:http://data.stackexchange.com/stackoverflow/q/116699/

+0

謝謝。工作。我忘了我需要按名稱訂購。我只是四處搜索,發現我實際上可以使用「ORDER BY 2」,它應該是一個不贊成使用的語法(儘管) –

0

你可以找到名稱

SELECT ID, Max(Name) 
FROM MyTable 
GROUP BY ID 
0
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

如果你不關心它的名字你留着,你可以使用一個MAX()MIN()合計只選擇一個名字:

SELECT ID, MAX(Name) as Name 
FROM MyTable GROUP BY ID