分组命名

如下表数据:Name为字段名
Name
aaa
aaa
aaa
bbb
bbb
ccc
ccc
ccc
ccc

要求通过sql语句实现下面的效果(分组分别改名):
Name
aaa1
aaa2
aaa3
bbb1
bbb2
ccc1
ccc2
ccc3
ccc4
 回复人:fcuandy(边打魔兽边回贴) ( 五级(中级)) 信誉:100  2006-7-18 22:25:29  得分:10
?  

表里面如果有标识列,比如 id int identity(1,1)
那么写法如下:
UPDATE a SET Name=Name + RTRIM
(
SELECT COUNT(1) FROM tb b WHERE a.Name=b.Name AND a.id>=b.id
)
FROM tb a

如果只有Name列

SELECT Name,IDENTITY(int) ID INTO #t FROM tb
TRUNCATE TABLE tb
INSERT tb
SELECT Name + RTRIM
(
SELECT COUNT(1) FROM tb b WHERE a.Name=b.Name AND a.id>=b.id
)
FROM tb a
DROP TABLE #t
Top
 回复人:fcuandy(边打魔兽边回贴) ( 五级(中级)) 信誉:100  2006-7-18 22:25:46  得分:0
?  

没测试,可能有手误
Top
 回复人:liangpei2008(逍遥叹) ( 一星(中级)) 信誉:100  2006-7-18 22:32:30  得分:10
?  

--试一下
Create Table t1 (Name Varchar(10))
Insert t1 Select 'aaa'
Union all Select 'aaa'
Union all Select 'aaa'
Union all Select 'bbb'
Union all Select 'bbb'
Union all Select 'ccc'
Union all Select 'ccc'
Union all Select 'ccc'
Union all Select 'ccc'
----------------
Select *,Identity(Int,1,1) As Id Into # From T1
--更新
Update A
Set Name=Name+Rtrim((Select Count(1) From # Where A.Name=Name And Id<=A.Id))
From # A
--结果
Select Name From #
Top
 回复人:liangpei2008(逍遥叹) ( 一星(中级)) 信誉:100  2006-7-18 22:34:12  得分:0
?  

fcuandy兄弟快! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值