如何更新某列使之成为序列

grayhoundd 2008-04-08 03:14:11
有表如下
id sn name
GUID 小黑
GUID 小白
GUID 小花
....

是一个班级的学生表。sn内容为空,如何更新sn列,并使之成为01,02等序号,并且按name排序
id sn name
GUID 01 小白
GUID 02 小黑
GUID 03 小花
....
...全文
70 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yyyyzzzz_2002 2008-04-08

/*id sn name
GUID 小黑
GUID 小白
GUID 小花
....

是一个班级的学生表。sn内容为空,如何更新sn列,并使之成为01,02等序号,并且按name排序
id sn name
GUID 01 小白
GUID 02 小黑
GUID 03 小花 */

use tempdb
go
if object_id('tempdb..#') is not null
drop table #

create table #(id varchar(20)
,sn varchar(20)
,name varchar(20))

insert into #
select 'GUID',null,'小白'
union all
select 'GUID',null,'小黑'
union all
select 'GUID',null,'小花'


select * from #

select id
,'0'+cast(row_number() over(partition by id order by id) as varchar(10)) as sn
,name
from #
order by name
回复
wlinglong 2008-04-08
delcare @i int
Select @i = 1
update tab
Set tab.i = @i , @i = @i + 1
回复
wynlc 2008-04-08
declare @tb table (sn varchar(10),name varchar(10))
insert into @tb select '','小黑'
insert into @tb select '','小白'
insert into @tb select '','小花'

select count(1) from @tb

update tp set sn=right('00'+ltrim((select count(1) from @tb where name<=tp.name)),3)from @tb tp

select * from @tb order by name

学习
回复
wzy_love_sly 2008-04-08


update tp set sn=right('000'+ltrim((select count(1) from @tb where name<=tp.name)),3)from @tb tp

自己控制 '0000'的个数和 right(,个数)
回复
grayhoundd 2008-04-08
[Quote=引用 1 楼 libin_ftsafe 的回复:]
SQL codeupdate表 tsetsn=right('0'+rtrim((selectcount(*)from表wherename<=t.name)),2)
[/Quote]

有语法错误啊
消息 102,级别 15,状态 1,第 1 行
't' 附近有语法错误。
消息 102,级别 15,状态 1,第 1 行
',' 附近有语法错误。
回复
grayhoundd 2008-04-08
还有,如果超过一百,以上朋友的方法就不对了

01
...
19
...
99
...
101
..
999
...
7865

如果位数少于2,以2位显示,否则正常显示
回复
chenxin2835 2008-04-08
[Quote=引用 1 楼 libin_ftsafe 的回复:]
SQL codeupdate 表 t set sn=right('0'+rtrim((select count(*) from 表 where name<=t.name)),2)
[/Quote]
学习了,很快,很精简
回复
grayhoundd 2008-04-08
按姓名的拼音编序
回复
grayhoundd 2008-04-08
ojuju10 的结果全是01, id是主键,GUID是32位字符串

其他人的似乎可以,后来发现,不支持中文姓名的排序
回复
ojuju10 2008-04-08

--2005
CREATE TABLE tb(id VARCHAR(20),sn VARCHAR(10),name VARCHAR(10))
GO
INSERT tb SELECT 'GUID',NULL , '小黑'
UNION ALL SELECT 'GUID',NULL , '小白'
UNION ALL SELECT 'GUID',NULL, '小花'

update a set sn=b.snum from tb a,(select id,name, snum=right('00'+ltrim(row_number() over (Partition by id order by name)),2) from tb ) b
where a.id=b.id and a.name=b.name

select * from tb
order by sn

id sn name
-------------------- ---------- ----------
GUID 01 小白
GUID 02 小黑
GUID 03 小花

(3 行受影响)

回复
fcuandy 2008-04-08
CREATE TABLE tb(id VARCHAR(20),sn VARCHAR(10),name VARCHAR(10))
GO
INSERT tb SELECT 'GUID',NULL , '小黑'
UNION ALL SELECT 'GUID',NULL , '小白'
UNION ALL SELECT 'GUID',NULL, '小花'
GO

UPDATE a SET sn=RIGHT('00' + RTRIM((SELECT COUNT(*) FROM tb WHERE name < = a.name)),2) FROM tb a
SELECT * FROM tb ORDER BY name

GO

DROP TABLE tb
GO
回复
wzy_love_sly 2008-04-08
declare @tb table (sn varchar(10),name varchar(10))
insert into @tb select '','小黑'
insert into @tb select '','小白'
insert into @tb select '','小花'

update tp set sn=right('000'+ltrim((select count(1) from @tb where name<=tp.name)),3)from @tb tp

select * from @tb order by name


sn name
001 小白
002 小黑
003 小花
回复
zarge 2008-04-08
update table
set sn = ( select count(*) from table where name <= t.name )
from table t
回复
update a
set sn=right('00'+cast((select count(1) from tab where name<=a.name) as varchar),2)
from tab a
回复
子陌红尘 2008-04-08
update 表 t set sn=right('0'+rtrim((select count(*) from 表 where name<=t.name)),2)
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-08 03:14
社区公告
暂无公告