sql“group by”相同的PersonID,不同的PersonNames。消除重复

时间:2011-11-07 15:12:45

标签: sql group-by unique distinct

我有一个(相当脏的)数据源(excel),如下所示:

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 / Person父'容器'),如:

SELECT DISTINCT ID, Name FROM MyTable<br/>


SELECT ID, Name FROM MyTable GROUP BY ID


当然,上述两种情况都是无效的,不起作用。

我想'组合'相同的ID并忽略/截断具有相同ID /不同名称的其他记录(因为我们都知道他们是同一个人,因为ID是我们的标识符,显然它只是一个错字/脏数据) 。

这可以通过一个 SELECT 查询来完成吗?

4 个答案:

答案 0 :(得分:1)

如果您不关心名称字段中显示的值,请使用MAX()MIN()

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

以下是一个可以使用的工作示例:http://data.stackexchange.com/stackoverflow/q/116699/

答案 1 :(得分:0)

您可以找到名称的MIN或MAX值

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

答案 2 :(得分: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

答案 3 :(得分:0)

如果您不关心自己保留的名称,可以使用MAX()MIN()汇总来选择一个名称:

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