教你轻松解决几种常见的SQL疑难问题(2)
作者:10631 发布时间:2009-01-07 14:25:00
要求:
过滤掉所有多余的重复记录
(1)我们知道distinct、group by 可以过滤重复,于是就有最直观的
select distinct * from emp
或
select name,age from emp group by name,age
获得需要的数据,如果可以使用临时表就有解法:
select distinct * into #tmp from emp
delete from emp
insert into emp select * from #tmp
(2)但是如果不可以使用临时表,那该怎么办?
我们观察到我们没办法区分数据(物理位置不一样,对 SQL Server来说没有任何区别),思路自然是想办法把数据区分出来了,既然现在的所有的列都没办法区分数据,唯一的办法就是再加个列让它区分出来,加什么列好?最佳选择是identity列:
alter table emp add chk int identity(1,1)
表示例:
name age chk
Tom 16 1
Sun 14 2
Tom 16 3
Tom 16 4
重复记录可以表示为:
select * from emp
where
(select count(*) from emp e where e.name=emp.name)>1
要删除的是:
delete from emp
where
(select count(*) from emp e where
e.name=emp.name and e.chk>=emp.chk)>1
再把添加的列删掉,出现结果。
alter table emp drop column chk
(3)另一个思路:
视图
select min(chk)
from emp
group by name
having count(*) >1
获得有重复的记录chk最小的值,于是可以
delete
from emp
where
chk not in
(
select min(chk)
from emp
group by name
)
写成join的形式也可以:
(1)有例表:emp
emp_no name age
001 Tom 17
002 Sun 14
003 Tom 15
004 Tom 16
◆要求生成序列号
(1)最简单的方法,根据b问题的解法:
alter table emp add chk int identity(1,1)
或 select *,identity(int,1,1) chk into #tmp from emp
◆如果需要控制顺序怎么办?
select top 100000 *,identity(int,1,1)
chk into #tmp from emp order by age
(2) 假如不可以更改表结构,怎么办?
如果不可以唯一区分每条记录是没有办法的,在可以唯一区分每条记录的时候,可以使用a 中的count的思路解决这个问题
select emp.*,(select count(*) from
emp e where e.emp_no<=emp.emp_no)
from emp
order by (select count(*) from
emp e where e.emp_no<=emp.emp_no)
猜你喜欢
- 随着CSS 框架的流行升温不断,前端er们也越来越关注CSS框架的使用,国内也有很多关于各种CSS框架的使用技巧和教程,彬Go一直关注着各种
- 给静态网页加密的方法有很多,有的简单有的复杂。前两天看见有人问静态网页加密问题,就写了这个代码思路:加密时:先把用户的密钥A用md5加密为B
- 北京时间2月15日据国外媒体报道,美国知名sns网站Facebook全球活跃用户量已突破1.75亿大关。数据显示,全球20%的网民都使用Fa
- 在应用SA-FileUp时,必须确认用户已对目的路径有读、写、删除的权力。在多文件上传中,由于浏览器不支持SIZE= 属性,所以对多文件的情
- ASP中的全角和半角转化函数,使用方法,传入要转换的字符给str即可,flag设置要转换的类型。<% Function&n
- 前言现在最流行的本地存储莫过于 cookie 的应用,但浏览器对 cookie 有很多限制,最大的限制在于其对cookie 总大小
- 今天做站时碰到个小问题:ASP正则获取文章内容图片地址,现在将此方法的思路拿出来分享下:Function RegExp_Execu
- 如何制作一个从Access数据库中读取记录的下拉菜单?看看这个例子:<% SQL = "SEL
- 通常用户看到的页面的样式会受到三层控制,第一层是浏览器的默认样式,第二层是网页定义样式,第三层是用户自定义样式。和CSS一样,后面的优先级高
- [原文地址] VS 2008 Performance Improvements[原文发表时间] Thursday, September 27
- 本文介绍了6个asp常用的判断函数的语法和使用方法,有IsArray 函数,IsDate 函数 ,IsEmpty 函数,IsNull 函数,
- 如何在ADO中使用SQL函数?代码见下:<%Set conn1 = Server.CreateObjec
- 图片外框特征参数: ①dashed:虚线②dotted:点虚线③solid:实线④double:双线⑤groove:沟
- 在写ASP网页时常用的检测代码:服务器现在时间:<% =now %>服务器CPU型号:<%=Request.ServerV
- 费茨法则是人机交互领域里一个非常重要的法则,在10年来得到了广泛的应用。Fitts法则最基本的观点就是任何时候,当一个人用鼠标来移动鼠标指针
- 最近对微格式进行了一些学习,在学习过程中收获不少。在此分享下,欢迎交流!微型格式的优点:1,语义化的HTML和CSS类名称来标记共同内容。2
- --sql语句就用下面的存储过程 /*--数据导出Excel导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件,如果文件不
- 有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错
- 在js中调用asp文件的方法很简单,我们可以用在静态页面的点击数统计,虽然静态页面不支持asp程序,但是我们可以使用js调用,来变相的达到这
- 前面我们讲了一些Dreamweaver MX的基本操作,相信大家看了后都会觉得比较简单,的确,这是个工具软件,操作方便应该是它的宗旨。其实网