DB中有个2位整型字段(主键),
DB中最多储存98条数据(就是不可能出现1~99全有的情况)
逻辑是要求实现这个字段1~99循环排序,
就是如果DB中没有1或99,那么就正常排序,如果有1和99,
那么1就要排在99的后面比如:
1,2,3,66,67,98,99
排序后是:98,99,1,2,3,66,671,2,3...96,97,99
排序后是:99,1,2,3...96,971,2,3,66,67,98
排序后是:1,2,3,66,67,982,3,66,67,98,99
排序后是:2,3,66,67,98,99

解决方案 »

  1.   

    DB中有个2位整型字段(主键),
    DB中最多储存98条数据(就是不可能出现1~99全有的情况)
    逻辑是要求实现这个字段1~99循环排序,
    就是如果DB中没有1或99,那么就正常排序,如果有1和99,
    那么1就要排在99的后面比如:
    1,2,3,66,67,98,99
    排序后是:66,67,98,99,1,2,31,2,3...96,97,99
    排序后是:99,1,2,3...96,971,2,3,66,67,98
    排序后是:1,2,3,66,67,982,3,66,67,98,99
    排序后是:2,3,66,67,98,99
      

  2.   

    --這是MS SQL的寫法,你試試看在ORACLE中是否可以用
    Create Table DB
    (ID Int)
    Insert DB Select 1
    Union All Select 2
    Union All Select 3
    Union All Select 4
    Union All Select 5
    Union All Select 10 
    Union All Select 97
    Union All Select 98
    Union All Select 99
    GO
    --方法一
    Select * From DB Where ID > (Select Min(ID) From DB A Where Not Exists(Select ID From DB Where ID = A.ID + 1))
    Union All
    Select * From DB Where ID <= (Select Min(ID) From DB A Where Not Exists(Select ID From DB Where ID = A.ID + 1))--方法二
    Select * From DB Order By (Case When ID > (Select Min(ID) From DB A Where Not Exists(Select ID From DB Where ID = A.ID + 1)) Then 0 Else 1 End), ID
    GO
    Drop Table DB
    --Result
    /*
    ID
    10
    97
    98
    99
    1
    2
    3
    4
    5
    */
      

  3.   

    西西...魚大哥在這裡也是一個三角褲叉叉~~哇哈哈
    oracle不曉得怎麼寫:(create table T(id int)
    insert into T select 1
    insert into T select 2
    insert into T select 3
    insert into T select 10
    insert into T select 11
    insert into T select 97
    insert into T select 98
    insert into T select 99select [id] from T
    order by  case when (select count(*) from T a where a.id<=T.id)=id 
                  then 1
                  else 0 end,   id/*
    id          
    ----------- 
    10
    11
    97
    98
    99
    1
    2
    3*/drop table T