整容说文库 > 程序代码 > 教育资讯

分组行号

来源:学生作业帮助网 编辑:整容说文库 时间:2020/02/29 19:02:56 程序代码
分组行号程序代码
一个表结构如下:
fid fnum
0    1
0    1
0    1
1    1
1    1
1    1
2    1
2    1
2    1
。。。。。

想要得到这样的结果
fid fnum
0    1
0    1
0    1
1    2
1    2
1    2
2    3
2    3
2    3
。。。。。 
SELECT FID,
(SELECT COUNT(DISTINCT FID)+1 FROM TB WHERE FID<T.FID) AS FNUM
FROM TB T
select fid ,
       (select count(distinct fid) from tb where fid<=t.fid)
from tb t
select fid,fnum=fid+1 from 表
select
 fid,
 dense_rank()over(partition by fid order by fid)
from
 tb
create table tb(fid int,fnum int)
insert into tb values(0 ,   1 )
insert into tb values(0 ,   1 )
insert into tb values(0 ,   1 )
insert into tb values(1 ,   1 )
insert into tb values(1 ,   1 )
insert into tb values(1 ,   1 )
insert into tb values(2 ,   1 )
insert into tb values(2 ,   1 )
insert into tb values(2  ,  1 )
go

--查询
select fid , fnum = (select count(distinct fid) from tb where fid < t.fid) + 1 from tb t

--更新
update tb set fnum = (select count(distinct fid) from tb where fid < t.fid) + 1 from tb t
select * from tb

drop table tb

/*
fid         fnum        
----------- ----------- 
0           1
0           1
0           1
1           2
1           2
1           2
2           3
2           3
2           3

(所影响的行数为 9 行)

*/
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(
FID INT
,FNUM INT
)
INSERT INTO TB
SELECT 0,    1 UNION ALL
SELECT 0,    1 UNION ALL
SELECT 0,    1 UNION ALL
SELECT 1,    1 UNION ALL
SELECT 1,    1 UNION ALL
SELECT 1,    1 UNION ALL
SELECT 2,    1 UNION ALL
SELECT 2,    1 UNION ALL
SELECT 2,    1 

SELECT FID 
,(SELECT COUNT(DISTINCT FID) FROM TB T2 WHERE T2.FID<=T1.FID)
FROM TB T1
/*
0 1
0 1
0 1
1 2
1 2
1 2
2 3
2 3
2 3
*/
又掉海沟了,怎么都不去吃饭
谢谢各位的回答,真的太感谢!

3楼的办法最精简高效!就是暂时结贴出现了小问题。无法结账
---------------------------------------------
--> Author : js_szy
--> Target : 各位大大,小卒就是想要一朵花
--> Date   : 2009-12-03 12:58:36
--> Version: SQL Server 2005
---------------------------------------------
    
--> 测试数据: @tb
declare @tb table (fid int,fnum int)
insert into @tb
select 0,1 union all
select 0,1 union all
select 0,1 union all
select 1,1 union all
select 1,1 union all
select 1,1 union all
select 2,1 union all
select 2,1 union all
select 2,1

select fid,fnum=(select count(distinct fid) from @tb where fid<=t.fid) from @tb t


fid         fnum
----------- -----------
0           1
0           1
0           1
1           2
1           2
1           2
2           3
2           3
2           3

(9 行受影响)
引用 8 楼 xzwyl 的回复:
谢谢各位的回答,真的太感谢!

3楼的办法最精简高效!就是暂时结贴出现了小问题。无法结账


如果你的fid不是连续的,就适用了
程序代码