我有一个(相当脏的)数据源(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 查询来完成吗?
答案 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