首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求教一个sql话语

2013-01-05 
求教一个sql语句原表aaabbcccde变成a-1a-2a-3b-1b-2c-1c-2c-3d-1e-1[解决办法]--CREATE TABLE 原表(NAME V

求教一个sql语句
原表
a
a
a
b
b
c
c
c
d
e
变成
a-1
a-2
a-3
b-1
b-2
c-1
c-2
c-3
d-1
e-1
[解决办法]

--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]

[解决办法]
--sql2000

DECLARE @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',NULL



DECLARE @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 行)*/

 

热点排行