选择DISTINCT

时间:2009-04-01 03:42:35

标签: sql sql-server tsql ssis

我正在开发一个SSIS包,我将数据从CSV文件导入到SQL表中。

我唯一关注的字段是用户名。此用户名必须为 唯一 。我不在乎名字或姓氏是否相同。

在包中,我将文件中的数据导入临时SQL表。然后我使用SELECT DISTINCT选择唯一的用户名。然后插入目标表。

问题是:当我执行SELECT DISTINCT用户名,名字和姓氏来临时。

它返回:

  • JSmith,John,Smith
  • JSmith,Joe,Smart
  • MBopp,Mary,Boppins

但我希望它能够回归:

  • JSmith,John,Smith
  • MBopp,Mary,Boppins

2 个答案:

答案 0 :(得分:3)

SELECT DISTINCT会为您指定的每个列选择所有不同的行,因此这并不是您想要的。

如果您的SQL风格支持它,请尝试使用GROUP BY FIRST(),如下所示。它将返回每个用户名的第一条记录。

SELECT Username, FIRST(Firstname), FIRST(Lastname)
FROM tempUsers
GROUP BY Username

如果没有,你必须使用行ID和子选择:

SELECT Username, FIRST(Firstname), FIRST(Lastname)
FROM tempUsers
WHERE RowID IN (SELECT MIN(RowID)
                FROM tempUsers
                GROUP BY Username)

**你不应该使用带有名字和姓氏的MIN,因为你无法保证它们会来自同一行: <击>

<击>
SELECT Username, MIN(Firstname), MIN(Lastname)
FROM tempUsers
GROUP BY Username

<击>

答案 1 :(得分:0)

对于Oracle,您可以使用以下查询:

select * from tempusers where rowid in (
select min(rowid) from tempusers group by username);