收藏本站 
广告服务 
网站地图 
>> 我们从网络和杂志上收集了近100000余篇各类电脑技术、网络技术、软件技术等方面的文章教程,我们的收录原则:不是精华拒不收录!
先飞电脑技术网技术文章
网络编程 | 网站建设 | 网络技术 | 设计教程 | 软件教学 | 程序开发 | 数据库开发 | 教育认证 | 硬件维护 | 媒体动画 | 机械电子 |
一个有关DISTINCT的问题解答
[ 作者:佚名    转贴自:网络转载    阅读次数:32    更新时间:2007-8-15 11:08:00   录入:刘光勇 ]        
    经常会有网友问到类似于这样的问题,环境是SQL Server,表中的数据如下:

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

解答及分析如下:

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)

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

【加入到收藏夹】告诉好友】【打印此文】【关闭窗口
  版权声明:本站提供的“一个有关DISTINCT的问题解答”版权归文章所有者,转载请注明出处!
 ·上一篇文章:一种基于记录集查找特定行的方法      ·下一篇文章:在查询结果中添加自动编号的方法
相关文章
·中小企业老板如何选择一个优秀的DBA[56]
·使用存储过程时一个错误的解决方法[70]
·菜鸟都可以入侵一个网吧所有电脑[26]
·女会计织毛衣网上叫卖一个月赚五千[30]
·安装SQL Server2K可能引发一个严重问题[95]
网站主页 | 收藏本页 | 联系我们 | 广告服务 | 站点地图 | 会员注册 | 招聘信息 | 内容指正

联系QQ:先飞电脑技术网站事务联系QQ,点击可以直接留言. 32933427 电话:13710542091 [世界排名] 鄂ICP备05005890号