首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求解分类排序有关问题

2012-02-07 
求解分类排序问题数据库实例:日期编号项目20070101001A20070101001B20070101001A20070101002C20070101002B

求解分类排序问题
数据库实例:

日期                             编号               项目
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

热点排行