34,588
社区成员
发帖
与我相关
我的任务
分享
--2000的方法
select 编号=(select count(1) from @tb where 部门=a.部门 and 姓名<=a.姓名 ),部门,姓名 from @tb a
--2005的方法
select 编号=row_number()over(partition by 部门 order by 姓名),*
from @tb
declare @tb table(部门 nvarchar(10),姓名 varchar(10))
--------------------------
insert @tb select N'部门一','aaa'
insert @tb select N'部门二','bbb'
insert @tb select N'部门一','ccc'
insert @tb select N'部门一','ddd'
insert @tb select N'部门二','eee'
insert @tb select N'部门二','fff'
insert @tb select N'部门一','ggg'
select 编号=(select count(1) from @tb where 部门=a.部门 and 姓名<=a.姓名 ),部门,姓名 from @tb a
/*
编号 部门 姓名
----------- ---------- ----------
1 部门一 aaa
1 部门二 bbb
2 部门一 ccc
3 部门一 ddd
2 部门二 eee
3 部门二 fff
4 部门一 ggg
(所影响的行数为 7 行)
*/
DECLARE @TB TABLE([编号] INT, [部门] NVARCHAR(3), [姓名] VARCHAR(3))
INSERT @TB
SELECT NULL, N'部门一', 'aaa' UNION ALL
SELECT NULL, N'部门二', 'bbb' UNION ALL
SELECT NULL, N'部门一', 'ccc' UNION ALL
SELECT NULL, N'部门一', 'ddd' UNION ALL
SELECT NULL, N'部门二', 'eee' UNION ALL
SELECT NULL, N'部门二', 'fff' UNION ALL
SELECT NULL, N'部门一', 'ggg'
UPDATE T SET 编号=(SELECT COUNT(*) FROM @TB WHERE 部门=T.部门 AND 姓名<=T.姓名)
FROM @TB AS T
SELECT *
FROM @TB
ORDER BY 部门,编号
/*
编号 部门 姓名
----------- ---- ----
1 部门一 aaa
2 部门一 ccc
3 部门一 ddd
4 部门一 ggg
1 部门二 bbb
2 部门二 eee
3 部门二 fff
(7 row(s) affected)
*/
---------------------------------
-- Author: htl258(Tony)
-- Date : 2009-07-30 10:54:37
---------------------------------
--> 生成测试数据表:tb
If not object_id('[tb]') is null
Drop table [tb]
Go
Create table [tb]([编号] nvarchar(3),[部门] nvarchar(3),[姓名] nvarchar(3))
Insert tb
Select null,'部门一','aaa' union all
Select null,'部门二','bbb' union all
Select null,'部门一','ccc' union all
Select null,'部门一','ddd' union all
Select null,'部门二','eee' union all
Select null,'部门二','fff' union all
Select null,'部门一','ggg'
Go
--Select * from tb
-->SQL查询如下:
update tb
set 编号=t.rn
from (
select rn=row_number()over(partition by 部门 order by 姓名),*
from tb
) as t
where tb.部门=t.部门
and tb.姓名=t.姓名
select * from tb
/*
编号 部门 姓名
---- ---- ----
1 部门一 aaa
1 部门二 bbb
2 部门一 ccc
3 部门一 ddd
2 部门二 eee
3 部门二 fff
4 部门一 ggg
(7 行受影响)
*/
-----------------------------------------
--> 测试时间:2009-07-30
--> 我的淘宝:http://shop36766744.taobao.com/
--------------------------------------------------
if object_id('[TB]') is not null drop table [TB]
create table [TB]([编号] sql_variant,[部门] varchar(6),[姓名] varchar(3))
insert [TB]
select null,'部门一','aaa' union all
select null,'部门二','bbb' union all
select null,'部门一','ccc' union all
select null,'部门一','ddd' union all
select null,'部门二','eee' union all
select null,'部门二','fff' union all
select null,'部门一','ggg'
select [编号]=(SELECT COUNT(姓名)+1 FROM tb WHERE [姓名]<a.[姓名] and a.[部门]=[部门]),
[部门],[姓名] from [TB] a order by [部门]
/*
编号 部门 姓名
----------- ------ ----
1 部门二 bbb
2 部门二 eee
3 部门二 fff
4 部门一 ggg
2 部门一 ccc
3 部门一 ddd
1 部门一 aaa
(7 行受影响)
*/
drop table TB
SELECT (SELECT COUNT(*) FROM TB WHERE 部门=T.部门 AND 姓名<=T.姓名 )AS 编号,* FROM TB T