网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQL与ACCESS、EXCEL的导入导出

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
test里有id,name字段

  如果有name相同的记录 只留下一条,其余的删除。

  name的内容不定,相同的记录数不定。

  有没有这样的sql语句?

  ==============================

  A:一个完整的解决方案:

  将重复的记录记入temp1表:

  select [标志字段id],count(*) into temp1 from [表名]

  group by [标志字段id]

  having count(*)>1

  2、将不重复的记录记入temp1表:

  insert temp1 select [标志字段id],count(*) from [表名] group by [标志字段id] having count(*)=1

  3、作一个包含所有不重复记录的表:

  select * into temp2 from [表名] where 标志字段id in(select 标志字段id from temp1)

  4、删除重复表:

  delete [表名]

  5、恢复表:

  insert [表名] select * from temp2

  6、删除临时表:

  drop table temp1

  drop table temp2

  ================================

  B:

  create table a_dist(id int,name varchar(20))

  insert into a_dist values(1,'abc')

  insert into a_dist values(1,'abc')

  insert into a_dist values(1,'abc')

  insert into a_dist values(1,'abc')

  exec up_distinct 'a_dist','id'

  select * from a_dist

  create procedure up_distinct(@t_name varchar(30),@f_key varchar(30))

  --f_key表示是分组字段﹐即主键字段

  as

  begin

  declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer

  select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_name +' group by ' +@f_key +' having count(*) > 1'

  exec(@sql)

  open cur_rows

  fetch cur_rows into @id,@max

  while @@fetch_status=0

  begin

  select @max = @max -1

  set rowcount @max

  select @type = xtype from syscolumns where id=object_id(@t_name) and name=@f_key

  if @type=56

  select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id

  if @type=167

  select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +''''

  exec(@sql)

  fetch cur_rows into @id,@max

  end

  close cur_rows

  deallocate cur_rows

  set rowcount 0

  end

  select * from systypes

  select * from syscolumns where id = object_id('a_dist')

  * 行列转换--普通

  假设有张学生成绩表(CJ)如下

  Name Subject Result

  张三 语文 80

  张三 数学 90

  张三 物理 85

  李四 语文 85

  李四 数学 92

  李四 物理 82

  想变成

  姓名 语文 数学 物理

  张三 80 90 85

  李四 85 92 82

  declare @sql varchar(4000)

  set @sql = 'select Name'

  select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'

  from (select distinct Subject from CJ) as a

  select @sql = @sql+' from test group by name'

  exec(@sql)

  行列转换--合并

  有表A,

  id pid

  1 1

  1 2

  1 3

  2 1

  2 2

  3 1

  如何化成表B:

  id pid

  1 1,2,3

  2 1,2

  3 1

  创建一个合并的函数

  create function fmerg(@id int)

  returns varchar(8000)

  as

  begin

  declare @str varchar(8000)set @str=''

  select @str=@str+','+cast(pid as varchar) from 表A where id=@id

  • 上一篇资讯: sql知识点总结
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师