日期:2014-05-18  浏览次数:20516 次

一个排序规则的问题,急,急!!!
题目如下:
编号         序号         是否               图号
1429 1 出图 AWwpf.11.1
1430 1 出图 AWwpf.11.1-1
1436 12 出图 AWwpf.11.1-12
1431 2 出图 AWwpf.11.1-2
1432 3 出图 AWwpf.11.1-3
1433 5 出图 AWwpf.11.1-5
1434 6 出图 AWwpf.11.1-6
1435 9 出图 AWwpf.11.1-9
1437 2 出图 AWwpf.11.2
1438 3 出图 AWwpf.11.2-3
1445 9 出图 AWwpf.11-10
1446 10 出图 AWwpf.11-11
1447 11 出图 AWwpf.11-12
1449 13 出图 AWwpf.11-14
1450 14 出图 AWwpf.11-15
1451 15 出图 AWwpf.11-16
1440 4 出图 AWwpf.11-4
1442 6 出图 AWwpf.11-6
1443 7 出图 AWwpf.11-7
1444 8 出图 AWwpf.11-8

SQl=select   *   from   T1   order   by   图号
这是按照图号排序的结果,现在要求实现按编号排序的结果   也就是下图

1429 1 出图 AWwpf.11.1
1430 1 出图 AWwpf.11.1-1
1431 2 出图 AWwpf.11.1-2
1432 3 出图 AWwpf.11.1-3
1433 5 出图 AWwpf.11.1-5
1434 6 出图 AWwpf.11.1-6
1435 9 出图 AWwpf.11.1-9
1436 12 出图 AWwpf.11.1-12
1437 2 出图 AWwpf.11.2
1438 3 出图 AWwpf.11.2-3
1440 4 出图 AWwpf.11-4
1442 6 出图 AWwpf.11-6
1443 7 出图 AWwpf.11-7
1444 8 出图 AWwpf.11-8
1445 9 出图 AWwpf.11-10
1446 10 出图 AWwpf.11-11
1447 11 出图 AWwpf.11-12
1449 13 出图 AWwpf.11-14
1450 14 出图 AWwpf.11-15
1451 15 出图 AWwpf.11-16

SQl=select   *   from   T1   order   by   序号

在本表中   AWwpf.11   是一个参数   ,且参数长度不固定,有什么样的方法能
够实现一个通用的排序规则?排序规则要求   优先考虑   "   . "     后考虑   "- "



------解决方案--------------------
先按第一列,如果重复按第二列,依次类推!不知道你是怎么样存储的?
------解决方案--------------------
好像你理解的次序不对


declare @t table(
图号 varchar(20)
)
insert @t select
'AWwpf.11.1 '
union all select
'AWwpf.11.1-1 '
union all select
'AWwpf.11.1-12 '
union all select
'AWwpf.11.1-2 '
union all select
'AWwpf.11.1-3 '
union all select
'AWwpf.11.1-5 '
union all select
'AWwpf.11.1-6 '
union all select
'AWwpf.11.1-9 '
union all select
'AWwpf.11.2 '
union all select
'AWwpf.11.2-3 '
union all select
'AWwpf.11-10 '
union all select
'AWwpf.11-11 '
union all select
'AWwpf.11-12 '
union all select
'AWwpf.11-14 '
union all select
'AWwpf.11-15 '
union all select
'AWwpf.11-16 '
union all select
'AWwpf.11-4 '
union all select
'AWwpf.11-6 '
union all select
'AWwpf.11-7 '
union all select
'AWwpf.11-8 '

select *
from @t
order by
case when charindex( '- ',图号)> 0 then REVERSE(stuff(REVERSE(图号),1,charINDEX( '- ',REVERSE(图号)), ' ')) else 图号 end,
case when charindex( '- ',图号)> 0 then cast(REVERSE(left(REVERSE(图号),charINDEX( '- ',REVERSE(图号))-1)) as int) else 0 end

--结果
图号
--------------------
AWwpf.11-4
AWwpf.11-6
AWwpf.11-7
AWwpf.11-8
AWwpf.11-10
AWwpf.11-11
AWwpf.11-12
AWwpf.11-14
AWwpf.11-15
AWwpf.11-16
AWwpf.11.1
AWwpf.11.1-1
AWwpf.11.1-2
AWwpf.11.1-3
AWwpf.11.1-5
AWwpf.11.1-6
AWwpf.11.1-9
AWwpf.11.1-12
AWwpf.11.2
AWwpf.11.2-3