我前面发的:高难度排序问题,急寻帮助!已结
发表于:2007-12-19 11:20:55
http://topic.csdn.net/u/20071221/21/5e4b4bbb-fb64-45de-aad8-506a6527a639.html比如有一表TTT有几个字段
ID
cde
cdeid
pid
数据如下 ID cde cdeid pid
1 AAA 2 2
2 DDD 1 3
3 CCC 1 1
4 DDD 3 1
5 DDD 2 1
6 DDD 1 2 每次搜索都显示表TTT中全部数据,搜索时POST传递数据cde值
例如搜索时cde=DDD
排序的规则是:
1、获取cde=DDD数据并且优先cdeid按从大到小排序然后pid按小到大排序
2、cde不等于DDD的数据cdeid不排序,pid按小到大排序 如果能满上二条应该搜索如下结果:
ID cde cdeid pid
4 DDD 3 1
5 DDD 2 1
6 DDD 1 2
2 DDD 1 3
3 CCC 1 1
1 AAA 2 2
我能想到的写法:
传数据cde=DDD 目前按 账号tim_spac及其它账号的方法已经解决,写法如下
select
cde,cdeid,pid
from
TTT
order by
(case cde when 'DDD' then cdeid else 0 end) desc,pid asc 新的问题:比如有二表TTT,FFF
FFF表数据如下
ID cde cdeid pid
1 AAA 2 2
2 DDD 1 3
3 CCC 1 1
4 DDD 3 1
5 DDD 2 1
6 DDD 1 2
TTT表数据如下 ,FFF_ID对应TTT中的ID
FFF_ID
1
2
3
4
5
6说明TTT表中的FFF_ID中的数据对应FFF中的ID每次搜索都显示表TTT中全部数据,搜索时POST传递数据cde值
例如搜索时cde=DDD
排序的规则是:以FFF_ID对应ID中的字段cde,cdeid,pid排序表TTT
1、获取cde=DDD数据并且优先cdeid按从大到小排序然后pid按小到大排序
2、cde不等于DDD的数据cdeid不排序,pid按小到大排序 如果能满上二条应该TTT表搜索如下结果:
FFF_ID
4
5
6
2
3
1
帮高手帮下忙!
select t1.FFF_ID
(select
cde,cdeid,pid
from
TTT
order by
(case cde when 'DDD' then cdeid else 0 end) desc,pid asc
) T1
select
ID
from
FFF
order by
(case cde when 'DDD' then cdeid else 0 end) desc,pid asc /*
结果
---------------------------------
4
5
6
2
3
1
*/
insert FFF select 1, 'AAA', 2, 2
insert FFF select 2, 'DDD', 1, 3
insert FFF select 3, 'CCC', 1, 1
insert FFF select 4, 'DDD', 3, 1
insert FFF select 5, 'DDD', 2, 1
insert FFF select 6, 'DDD', 1, 2
go
create table TTT(FFF_ID int)
insert TTT select 1
insert TTT select 2
insert TTT select 3
insert TTT select 4
insert TTT select 5
insert TTT select 6 goselect
a.FFF_ID
from
TTT a
left join
FFF b on a.FFF_ID=b.ID
order by case when b.cde='DDD' then 1 else 0 end desc, b.pid ascFFF_ID
-----------
4
5
6
2
3
1(所影响的行数为 6 行)