您的位置:首页技术开发数据库技巧 → 一个有关DISTINCT的问题解答

一个有关DISTINCT的问题解答

时间:2004/12/2 0:59:00来源:本站整理作者:蓝点我要评论(0)

经常会有朋友问到类似于这样的问题,

表中的数据如下

ID   AA   BB    

1    123   456

1    4535 54

1    60     6564

1    60     656

2    50     664

2    60     6

3    89     89

4    40     4242

希望得到的结果是

ID   AA   BB

1    123   456

2    50     664

3    89     89

4    40     4242

当然了,环境是SQL Server

解答及分析如下:

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   BB

1    4535 6564

2    60   664

3    89   89

4    40   4242

ID是唯一了,但不一定后面的字段是同一条记录的

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)

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

不过用了两个T-SQL语句,

而且如果是大数据量的话,性能问题将很突出

到目前为止,我还没找到用一个T-SQL语句实现同样功能的方法,

如果谁有,希望补充


相关阅读 Mac访问Windows共享文件夹Windows 7正版系统验证方法windows 8.1系统版本号查看方法Windows 8.1系统电话激活时无法输入微软返回代码解决方法Windows 8如何调整屏幕分辨率windows8.1磁盘占用100%解决方法Mac双系统如何删除Boot Camp安装的Windows分区Apple教你如何在Mac 上运行 Windows

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 mssql企业管理器不能打 Oracle PRKC-1002错误原因和解决方案SQL SERVER数据库日志清空图文教程win2003计算机改名后sql server 2005 本地复DB2错误信息码大全

人气排行 彻底解决mysql中文乱码的办法mysql数据库root密码忘记的修改方法SQL SERVER数据库日志清空图文教程.bak备份文件如何恢复Oracle PRKC-1002错误原因和解决方案Oracle错误代码大全如何将txt的文本数据导入SQL server 2005呢DB2错误信息码大全