求一SQL语句

yezby20080304 2008-03-04 02:21:18
目的:我要对表的某一字段如学号符合条件的记录进行重新依次编号(批量更新);
原表:
学号 姓名 年级 班级 标志
001 AA 初一 1班 F
002 BB 初一 1班 F
003 CC 初一 1班 F
004 DD 初一 2班 F
005 EE 初一 2班 T
我要把标志=F的记录的学号依次重新设置成如下:
学号 姓名 年级 班级 标志
200801 AA 初一 1班 F
200802 BB 初一 1班 F
200803 CC 初一 1班 F
200804 DD 初一 2班 F
005 EE 初一 2班 T
注意:1,初始值200801是可以定义的,以后的学号依次加1即可;2,要求对原表进行批量更新.
...全文
128 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
山之魂2 2008-03-04
  • 打赏
  • 举报
回复
create proc p_up
(@学号 int )
as
update table
set 学号=@学号-1+(select count(*) from table A where A.学号 <=table .学号 and A.标志='F')
where 标志='F'


--@学号:起始编号
playwarcraft 2008-03-04
  • 打赏
  • 举报
回复
--try
update T
set 学号=200822+(select count(*) from T A where A.学号 <=T.学号 and A.标志='F')
where 标志='F'
csshan 2008-03-04
  • 打赏
  • 举报
回复
update 表 
set 学号='2008'+right(学号,2)
where 标志='F'

准备接分了,
pt1314917 2008-03-04
  • 打赏
  • 举报
回复

update 表 set 学号='2008'+right(学号,2) where 标志='F'
yezby20080304_2 2008-03-04
  • 打赏
  • 举报
回复
楼主补充说明:
原表:
学号 姓名 年级 班级 标志
001 AA 初一 1班 F
002 BB 初一 1班 F
003 CC 初一 1班 F
004 DD 初一 2班 F
005 EE 初一 2班 T
我要把标志=F的记录的学号依次重新设置成如下:
学号 姓名 年级 班级 标志
200823 AA 初一 1班 F
200824 BB 初一 1班 F
200825 CC 初一 1班 F
200826 DD 初一 2班 F
005 EE 初一 2班 T
注意:1,初始值200823是自定义的而不是取原来的学号的右边部分!!,以后的学号在自定义的学号基础上依次加1即可;
dawugui 2008-03-04
  • 打赏
  • 举报
回复
--search
select m.姓名,m.年级,m.班级,m.标志, 学号='2008'+ right('00'+cast(m.px as varchar),2) from
(
select t.* , px = (select count(1) from tb where (年级=t.年级 and 班级 < t.班级) or (年级=t.年级 and 班级 = t.班级 and 姓名 < t.姓名) ) + 1 from tb t
) t

--update
update tb
set 学号 = tb2.学号
from tb tb1,(select m.姓名,m.年级,m.班级,m.标志, 学号='2008'+ right('00'+cast(m.px as varchar),2) from
(
select t.* , px = (select count(1) from tb where (年级=t.年级 and 班级 < t.班级) or (年级=t.年级 and 班级 = t.班级 and 姓名 < t.姓名) ) + 1 from tb t
) t
) tb2
where tb1.年级=tb2.年级 and tb1.班级 = tb2.班级 and tb1.姓名 = tb2.姓名
playwarcraft 2008-03-04
  • 打赏
  • 举报
回复
--try
update T
set 学号=200800+(select count(*) from T A where A.学号<=T.学号 and A.标志='F')
where 标志='F'
dawugui 2008-03-04
  • 打赏
  • 举报
回复
目的:我要对表的某一字段如学号符合条件的记录进行重新依次编号(批量更新);
原表:
学号 姓名 年级 班级 标志
001 AA 初一 1班 F
002 BB 初一 1班 F
003 CC 初一 1班 F
004 DD 初一 2班 F
005 EE 初一 2班 T
我要把标志=F的记录的学号依次重新设置成如下:
学号 姓名 年级 班级 标志
200801 AA 初一 1班 F
200802 BB 初一 1班 F
200803 CC 初一 1班 F
200804 DD 初一 2班 F
005 EE 初一 2班 T
注意:1,初始值200801是可以定义的,以后的学号依次加1即可;2,要求对原表进行批量更新.

表jh03有下列数据:
name score
aa  99
bb  56
cc  56
dd  77
ee  78
ff  76
gg  78
ff  50

1. 名次生成方式1,Score重复时合并名次
SELECT * , Place=(SELECT COUNT(DISTINCT Score) FROM jh03 WHERE Score >= a.Score)
FROM jh03 a
ORDER BY Place
结果
Name Score Place
---------------- ----------------- -----------
aa 99.00 1
ee 78.00 2
gg 78.00 2
dd 77.00 3
ff 76.00 4
bb 56.00 5
cc 56.00 5
ff 50.00 6

2. 名次生成方式2 , Score重复时保留名次空缺
SELECT * , Place=(SELECT COUNT(Score) FROM jh03 WHERE Score > a.Score) + 1
FROM jh03 a
ORDER BY Place
结果
Name Score Place
--------------- ----------------- -----------
aa 99.00 1
ee 78.00 2
gg 78.00 2
dd 77.00 4
ff 76.00 5
bb 56.00 6
cc 56.00 6
ff 50.00 8
gahade 2008-03-04
  • 打赏
  • 举报
回复
update 表
set 学号='2008'+right(学号,2)
where 标志='F'

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧