日期:2014-05-18  浏览次数:20606 次

请教一个SQL语句实现:如下
字段1       字段2
    1           管理
    2           其他
    3           管理
    4           管理
    5           其他
    6           管理
    7           管理
....
怎么变为:
字段1       字段2
    1           管理1
    2           其他1
    3           管理2
    4           管理3
    5           其他2
    6           管理4
    7           管理5
....
就是把   字段2   相同的值都分别加上     1、2、3。。。。

------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb
(
字段1 varchar(10),
字段2 varchar(10)
)

insert into tb(字段1,字段2) values( '1 ', '管理 ')
insert into tb(字段1,字段2) values( '2 ', '其他 ')
insert into tb(字段1,字段2) values( '3 ', '管理 ')
insert into tb(字段1,字段2) values( '4 ' , '管理 ')
insert into tb(字段1,字段2) values( '5 ' , '其他 ')
insert into tb(字段1,字段2) values( '6 ', '管理 ')
insert into tb(字段1,字段2) values( '7 ', '管理 ')

select 字段1 , rtrim(字段2) + cast(px as varchar(10)) as 字段2 from
(
select px=(select count(1) from tb where 字段2=a.字段2 and 字段1 <a.字段1)+1 , * from tb a
) t
order by 字段1

drop table tb

--result
字段1 字段2
---------- --------------------
1 管理1
2 其他1
3 管理2
4 管理3
5 其他2
6 管理4
7 管理5

(所影响的行数为 7 行)


------解决方案--------------------
DECLARE @tb TABLE([字段1] int, [字段2] nvarchar(10))
INSERT INTO @tb
SELECT 1, N '管理 '
UNION ALL SELECT 2, N '其他 '
UNION ALL SELECT 3, N '管理 '
UNION ALL SELECT 4, N '管理 '
UNION ALL SELECT 5, N '其他 '
UNION ALL SELECT 6, N '管理 '
UNION ALL SELECT 7, N '管理 '


UPDATE T
SET 字段2 = 字段2 + (SELECT CAST(COUNT(1) + 1 AS NVARCHAR) FROM @tb WHERE 字段2 = T.字段2 AND 字段1 < T.字段1)
FROM @tb T

select * from @tb

/*结果字段1 字段2
----------- ----------
1 管理1
2 其他1
3 管理2
4 管理3
5 其他2
6 管理4
7 管理5
*/
------解决方案--------------------
create table T(字段1 int,字段2 varchar(10))
insert T select 1, '管理 '
union all select 2, '其他 '
union all select 3, '管理 '
union all select 4, '管理 '
union all select 5, '其他 '
union all select 6, '管理 '
union all select 7, '管理 '
union all select 8, '什么 '

update T set 字段2=字段2+rtrim((select count(*)+1 from T where 字段2=a.字段2 and 字段1 <a.字段1))
from T a
where exists(select 1 from T where 字段2=a.字段2 and 字段1 <> a.字段1)