网络编程
位置:首页>> 网络编程>> 数据库>> 教你轻松解决几种常见的SQL疑难问题(2)

教你轻松解决几种常见的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)

0
投稿

猜你喜欢

  • 随着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的基本操作,相信大家看了后都会觉得比较简单,的确,这是个工具软件,操作方便应该是它的宗旨。其实网
手机版 网络编程 asp之家 www.aspxhome.com