求解分类排序问题
数据库实例:
日期 编号 项目
20070101 001A
20070101 001B
20070101 001A
20070101 002C
20070101 002B
20070105 003D
20070106 001F
20070107 005A
20070109 001G
20070109 001R
20070109 001O
20070109 001S
根据数据库中日期及编号生成ID编号(从0开始),希望结果如下:
日期 编号ID项目
20070101 0010A
20070101 0011B
20070101 0012A
20070101 0020C
20070101 0021B
20070105 0030D
20070106 0010F
20070107 0050A
20070109 0010G
20070109 0011R
20070109 0012O
20070109 0013S
[解决办法]
--啊,早说啊
--没有主键要借助临时表
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
/*
200701010010A
200701010011B
200701010012A
200701010020C
200701010021B
200701050030D
200701060010F
200701070050A
200701090010G
200701090011R
200701090012O
200701090013S
(所影响的行数为 12 行)
*/
drop table #Temp