生成带有字母的连续号

tanshihou 2013-08-28 02:37:19
现在有这样一个表
ID No Name
1 00001 AAA
2 00001 AAA
3 00001 AAA
4 00001 AAA
5 00001 AAA
6 00001 AAA
7 00001 AAA
8 00001 AAA
9 00001 AAA
10 00001 AAA
11 00001 AAA
12 00001 AAA
13 00002 BBB
14 00002 BBB
15 00002 BBB

想生成一个连续的号码来区别
想生成的结果是
ID No Name SubNo
1 00001 AAA 01
2 00001 AAA 02
3 00001 AAA 03
4 00001 AAA 04
5 00001 AAA 05
6 00001 AAA 06
7 00001 AAA 07
8 00001 AAA 08
9 00001 AAA 09
10 00001 AAA 0A
11 00001 AAA 0B
12 00001 AAA 0C
13 00002 BBB 01
14 00002 BBB 02
15 00002 BBB 03

也就是说No相同的记录会有N条,想把这N条用一个SubNo区分开,这个SubNo的号码
是0~9再加上A~Z的也就是说
最开始01,02,......09,0A,0B,0C,......0Z,10,11,......19,1A,1B......1Z,2A......9Z
A0............

谢谢了
...全文
75 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawn 2013-08-28
  • 打赏
  • 举报
回复
if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [ID] INT, [No] varchar(100), [Name] varchar(100));
insert #temp
select '1','00001','AAA' union all
select '2','00001','AAA' union all
select '3','00001','AAA' union all
select '4','00001','AAA' union all
select '5','00001','AAA' union all
select '6','00001','AAA' union all
select '7','00001','AAA' union all
select '8','00001','AAA' union all
select '9','00001','AAA' union all
select '10','00001','AAA' union all
select '11','00001','AAA' union all
select '12','00001','AAA' union all
select '13','00002','BBB' union all
select '14','00002','BBB' union all
select '15','00002','BBB' 

--SQL:
;WITH cte1 AS
(
	SELECT ch=CHAR(number)
	FROM master..spt_values
	WHERE type = 'p'
		AND (number BETWEEN 48 AND 57 OR number BETWEEN 65 AND 90)
),
cte2 AS
(
	SELECT rowid=ROW_NUMBER() OVER(ORDER BY a.ch+b.ch), ch=a.ch+b.ch
	FROM cte1 a
	CROSS JOIN cte1 b
	WHERE a.ch+b.ch <> '00'
)
SELECT a.id,a.[no],a.name,b.ch FROM
(select rowid=ROW_NUMBER() OVER(PARTITION BY [No] ORDER BY ID), * FROM #temp) a
INNER JOIN cte2 b
ON a.rowid = b.rowid
ORDER BY a.ID
/*
id	no	name	ch
1	00001	AAA	01
2	00001	AAA	02
3	00001	AAA	03
4	00001	AAA	04
5	00001	AAA	05
6	00001	AAA	06
7	00001	AAA	07
8	00001	AAA	08
9	00001	AAA	09
10	00001	AAA	0A
11	00001	AAA	0B
12	00001	AAA	0C
13	00002	BBB	01
14	00002	BBB	02
15	00002	BBB	03
*/
Andy__Huang 2013-08-28
  • 打赏
  • 举报
回复
参考: http://bbs.csdn.net/topics/390568528 前几天刚有人问这样的问题

34,575

社区成员

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

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