SQL:选择Distinct [Column Name],但也返回其他列

时间:2013-11-22 15:30:33

标签: c# asp.net sql sql-server

我有以下 SignupInfo 表:

ID        UserID    FName     LName
--------------------------------------
ABC001    ABC       Albert    Einstein
DEF001    DEF       Isaac     Newton
ABC049    ABC       Albert    Einstein
DEF568    DEF       Isaac     Newton
GHI230    GHI       Thomas    Edison

我需要UserIDFNameLName只有UserID DISTINCT

SELECT DISTINCT UserID FROM SignupInfo仅向我提供UserID列,但我也需要FNameLName

提前致谢!

修改

结果应为:

UserID    FName     LName
----------------------------
ABC       Albert    Einstein
DEF       Isaac     Newton
GHI       Thomas    Edison

7 个答案:

答案 0 :(得分:2)

GROUP BY可以做你想做的事。

SELECT UserID, FName, LName FROM SignupInfo GROUP BY UserID, FName, LName;

我刚刚在自己的数据库中重新创建了这个,这是我查询的结果:

UserID  FName   LName
ABC Albert  Einstein
DEF Isaac   Newton
GHI Thomas  Edison

我认为这正是OP所要求的 如果他想要别的东西,或许他需要澄清一下。

答案 1 :(得分:1)

尝试

select * from SignupInfo
where UserId in (select UserID from SignupInfo group by UserId having count(*) = 1)

编辑 - 示例:

declare @fred table (id varchar(max),UserID varchar(max),FName varchar(max),LName varchar(max))

insert into @fred values 
('ABC001',    'ABC',       'Albert'   , 'Einstein'),
('DEF001',    'DEF',       'Isaac'   ,  'Newton'),
('ABC049',    'ABC',       'Albert' ,   'Einstein'),
('DEF568',    'DEF',       'Isaac'  ,   'Newton'),
('GHI230',    'GHI',       'Thomas',    'Edison')

select * from @fred
where UserId in (select UserID from @fred group by UserId having count(*) = 1)

答案 2 :(得分:0)

假设我们要根据ID列从最早排序的行中选择值。

然后你想要的查询是:

;WITH Ordered AS (
  SELECT *,ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY ID) rn
  FROM SignupInfo
)
select UserID,FName,LName from Ordered where rn = 1

如果有其他排序顺序应该是首选,只需更改ORDER BY子句中的OVER(...)

答案 3 :(得分:0)

这将完成工作:

SELECT DISTINCT(UserID), FName, LName
FROM SignupInfo

答案 4 :(得分:0)

我刚刚意识到我可以做到:

SELECT DISTINCT UserID, FName, LName FROM SignupInfo

因为即使2个用户具有相同的 FName LName ,他们的 UserID 仍然会有所不同。

在我看来,数据库中唯一的问题是维护得很差。我这样说是因为我认为应该有一个单独的表,其中包含用户的UserID,FNames和LNames,因此可以消除操作员在此表中拼写错误名称的可能性。

总结一个例子,如果操作员输入这个新行(注意 Albert 是拼写错误的):

ID        UserID    FName     LName
--------------------------------------
ABC061    ABC       Albret    Einstein

然后我的 SELECT 语句将返回2行,其中 UserID 相同。

无论如何,感谢你们的建议!

答案 5 :(得分:0)

检查一下

select Distinct userid,[Column2],[column003] from [table name]

答案 6 :(得分:-1)

查询应如下所示

SELECT UserID, FName, LName FROM SignupInfo GROUP BY UserID