求解分类排序问题
数据库实例:
日期 编号 项目
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
根据数据库中日期及编号生成ID编号(从0开始),希望结果如下:
日期 编号 ID 项目
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