--CREATE TABLE 原表(NAME VARCHAR(10)) --INSERT INTO 原表 --SELECT 'a' --UNION ALL --SELECT 'a' --UNION ALL --SELECT 'a' --UNION ALL --SELECT 'b' --UNION ALL --SELECT 'b' --UNION ALL --SELECT 'c' --UNION ALL --SELECT 'c' --UNION ALL --SELECT 'c' --UNION ALL --SELECT 'd' --UNION ALL --SELECT 'e' SELECT NAME+'-'+CONVERT(VARCHAR(10),ROW_NUMBER()OVER(PARTITION BY NAME ORDER BY GETDATE())) FROM 原表 /* --------------------- a-1 a-2 a-3 b-1 b-2 c-1 c-2 c-3 d-1 e-1 */
--> 测试数据:[TB] if object_id('[TB]') is not null drop table [TB] GO create table [TB]([col] varchar(20)) insert [TB] select 'a' union all select 'a' union all select 'a' union all select 'b' union all select 'b' union all select 'c' union all select 'c' union all select 'c' union all select 'd' union all select 'e'select col+'-'+RTRIM(ROW_NUMBER() OVER (partition BY col ORDER BY col)) from [TB] /*--------------------------------------------- a-1 a-2 a-3 b-1 b-2 c-1 c-2 c-3 d-1 e-1(10 行受影响) */drop table [TB]
--sql2000DECLARE @a TABLE(a VARCHAR(10),b INT ) INSERT @a SELECT 'a',NULL UNION ALL SELECT 'a',NULL UNION ALL SELECT 'a',NULL UNION ALL SELECT 'b',NULL UNION ALL SELECT 'b',NULL UNION ALL SELECT 'c',NULL UNION ALL SELECT 'c',NULL UNION ALL SELECT 'c',NULL UNION ALL SELECT 'd',NULL UNION ALL SELECT 'e',NULLDECLARE @i INT DECLARE @t VARCHAR(20)UPDATE @a SET b =@i,@i=CASE WHEN a=@t THEN ISNULL(@i,1)+1 ELSE 1 END ,@t=a SELECT a,a+'-'+LTRIM(b) b FROM @a--result /*a b ---------- ----------------------- a a-1 a a-2 a a-3 b b-1 b b-2 c c-1 c c-2 c c-3 d d-1 e e-1(所影响的行数为 10 行)*/
select (select COUNT(*) from station where 规范站名=mystation.规范站名 and 编号>=mystation.编号 ) as id, 规范站名 from station as mystation order by 规范站名,id不过还要谢谢大家都热心帮助,谢谢给分
--INSERT INTO 原表
--SELECT 'a'
--UNION ALL
--SELECT 'a'
--UNION ALL
--SELECT 'a'
--UNION ALL
--SELECT 'b'
--UNION ALL
--SELECT 'b'
--UNION ALL
--SELECT 'c'
--UNION ALL
--SELECT 'c'
--UNION ALL
--SELECT 'c'
--UNION ALL
--SELECT 'd'
--UNION ALL
--SELECT 'e'
SELECT NAME+'-'+CONVERT(VARCHAR(10),ROW_NUMBER()OVER(PARTITION BY NAME ORDER BY GETDATE()))
FROM 原表
/*
---------------------
a-1
a-2
a-3
b-1
b-2
c-1
c-2
c-3
d-1
e-1
*/
if object_id('[TB]') is not null drop table [TB]
GO
create table [TB]([col] varchar(20))
insert [TB]
select 'a' union all
select 'a' union all
select 'a' union all
select 'b' union all
select 'b' union all
select 'c' union all
select 'c' union all
select 'c' union all
select 'd' union all
select 'e'select col+'-'+RTRIM(ROW_NUMBER() OVER (partition BY col ORDER BY col)) from [TB]
/*---------------------------------------------
a-1
a-2
a-3
b-1
b-2
c-1
c-2
c-3
d-1
e-1(10 行受影响)
*/drop table [TB]
INSERT @a SELECT 'a',NULL
UNION ALL SELECT 'a',NULL
UNION ALL SELECT 'a',NULL
UNION ALL SELECT 'b',NULL
UNION ALL SELECT 'b',NULL
UNION ALL SELECT 'c',NULL
UNION ALL SELECT 'c',NULL
UNION ALL SELECT 'c',NULL
UNION ALL SELECT 'd',NULL
UNION ALL SELECT 'e',NULLDECLARE @i INT
DECLARE @t VARCHAR(20)UPDATE @a SET b =@i,@i=CASE WHEN a=@t THEN ISNULL(@i,1)+1 ELSE 1 END ,@t=a SELECT a,a+'-'+LTRIM(b) b FROM @a--result
/*a b
---------- -----------------------
a a-1
a a-2
a a-3
b b-1
b b-2
c c-1
c c-2
c c-3
d d-1
e e-1(所影响的行数为 10 行)*/
规范站名 from station as mystation
order by 规范站名,id不过还要谢谢大家都热心帮助,谢谢给分