分类排序
表格如下:
se id h
11 01 sa
11 02 pa
11 03 em
11 04 ch
11 05 ca
.. .. ..
12 01 sa
12 02 pa
12 03 em
.. .. ..
根据h升序,重新设置ID
希望得到如下结果:
se id h
11 01 ca
11 02 ch
11 03 em
11 04 pa
11 05 sa
12 01 em
12 02 pa
12 03 sa
------解决方案--------------------declare @t table(se int,id varchar(10),h varchar(10))
insert @t select 11, '01 ', 'sa '
insert @t select 11, '02 ', 'pa '
insert @t select 11, '03 ', 'em '
insert @t select 11, '04 ', 'ch '
insert @t select 11, '05 ', 'ca '
insert @t select 12, '01 ', 'sa '
insert @t select 12, '02 ', 'pa '
insert @t select 12, '03 ', 'em '
select se,id,
(select h from @t b
where b.se=a.se and (select count(1) from @t where se=b.se and h <=b.h)=a.id) h
from @t a
--结果
se id h
----------- ---------- ----------
11 01 ca
11 02 ch
11 03 em
11 04 pa
11 05 sa
12 01 em
12 02 pa
12 03 sa
(所影响的行数为 8 行)
------解决方案-------------------- create table T(se int, id varchar(10), h varchar(10))
insert T select 11, '01 ', 'sa '
union all select 11, '02 ', 'pa '
union all select 11, '03 ', 'em '
union all select 11, '04 ', 'ch '
union all select 11, '05 ', 'ca '
union all select 12, '01 ', 'sa '
union all select 12, '02 ', 'pa '
union all select 12, '03 ', 'em '
select se,
id=(select count(*) from T where se=tmp.se and h <=tmp.h),
h
from T as tmp
order by se, h
--result
se id h
----------- ----------- ----------
11 1 ca
11 2 ch
11 3 em
11 4 pa
11 5 sa
12 1 em
12 2 pa
12 3 sa
(8 row(s) affected)