细化解析:一个有关DISTINCT的问题解答

来源:岁月联盟 编辑:zhuzhu 时间:2007-08-15

经常会有网友问到类似于这样的问题,环境是SQL Server,表中的数据如下:

 

ID   AA    BB    1    123   4561    4535  541    60    65641    60    6562    50    6642    60     63    89    894    40    4242希望得到结果是:ID   AA   BB1    123  4562    50   6643    89   894    40   4242

解答及分析如下:

1.正确的语法

不少朋友希望用distinct就解决问题,但不可能,disctinct将重复记录忽略,但它忽略的是完全一致的重复记录,而不是其中某个字段的重复记录。

 

select distinct ID,AA,BB from tName其它如select distinct(ID),AA,BB from tName 或select ID,distinct AA,BB的写法都是无效的。

2.使用group by和聚合函数

 

select ID,MAX(AA) AS AA,MAX(BB) AS BB from tName group by ID可以得到如下结果ID   AA   BB1    4535 65642    60   6643    89   894    40   4242ID是唯一,但不一定后面字段是同一条记录的。

3.使用临时表

select IDENTITY(INT,1,1) as TID,ID,AA,BB into #Tmp from tName

select t1.ID,t1.AA,t1.BB from #Tmp t1 where t1.TID in

(select min(T2.TID) from #Tmp t2 group by t2.ID)

这样可以得到符合要求的结果。