求解分类排序有关问题

www.myexceptions.net  网友分享于：2013-02-08  浏览：7次

20070101       001 A
20070101     001 B
20070101     001 A
20070101     002 C
20070101     002 B
20070105     003 D
20070106     001 F
20070107     005 A
20070109     001 G
20070109     001 R
20070109     001 O
20070109     001 S

20070101     001 0 A
20070101       001 1 B
20070101     001 2 A
20070101     002 0 C
20070101     002 1 B
20070105     003 0 D
20070106     001 0 F
20070107     005 0 A
20070109     001 0 G
20070109     001 1 R
20070109     001 2 O
20070109     001 3 S

------解决方案--------------------
--啊，早说啊

--没有主键要借助临时表

declare @Test table(日期 varchar(255),编号 varchar(255),项目 varchar(255))
insert @Test
select '20070101 ', '001 ', 'A ' union all
select '20070101 ', '001 ', 'B ' union all
select '20070101 ', '001 ', 'A ' union all
select '20070101 ', '002 ', 'C ' union all
select '20070101 ', '002 ', 'B ' union all
select '20070105 ', '003 ', 'D ' union all
select '20070106 ', '001 ', 'F ' union all
select '20070107 ', '005 ', 'A ' union all
select '20070109 ', '001 ', 'G ' union all
select '20070109 ', '001 ', 'R ' union all
select '20070109 ', '001 ', 'O ' union all
select '20070109 ', '001 ', 'S '

select OrderNo = identity(int, 1, 1), * into #Temp from @Test order by 日期, 编号

select

ID = (select sum(1)-1 from #Temp where 日期=a.日期 and 编号=a.编号 and OrderNo <=a.OrderNo),

from #Temp a

/*

20070101 001 0 A
20070101 001 1 B
20070101 001 2 A
20070101 002 0 C
20070101 002 1 B
20070105 003 0 D
20070106 001 0 F
20070107 005 0 A
20070109 001 0 G
20070109 001 1 R
20070109 001 2 O
20070109 001 3 S

（所影响的行数为 12 行）

*/

drop table #Temp