表A ID 为递增的种子, 
    ID     Name
     1000   glass
     1001   glass
     1003   towel
     1004   glass
     1005   soap
     1006   hook
     ...    ...请问如何实现下面的排列(就是根据NAME的升序循环排序)不知道大家明白我的意思么?谢谢!
     1004   glass
     1006   hook
     1005   glass
     1003   towel
     1001   glass
     1000   glass

解决方案 »

  1.   

    我是看明白了。如果你表中只有一个glass就看不明白应该怎么排了1 glass
    2 mxxxj
    3 hikj
    4 vxvde
    5 lvvvv
    6 bxxc要怎么排?
    先最靠前的 bxxc 再 取仅次于它的 glass
    然后再取除已排过序的最靠前的 hikj 再取仅次于它的 lvvvv
    再取除已排过序的最靠前的 mxxxj 再取仅次它的 vxvde
    这样排下来就是按 name 顺序排.楼主你的要求有意思吗?除非你按name中多次出现的一个值循环升降排序。
      

  2.   

    如果只有一个glass 就根据ID 的降序来排,相当于 N个(记录数)Name的循环
    1 glass
    2 mxxxj
    3 hikj
    4 vxvde
    5 lvvvv
    6 bxxc应该是得到以下的排列 因为NAME没有重复的,相当于NAME升序走一次循环,如果是多次循环的话同样的Name,首先出现的应该是ID最大的。谢谢
    6 bxxc
    1 glass
    3 hikj
    5 lvvv
    2 mxxxj
    4 vxvde
      

  3.   

    是不是如果 记录有9条,name值相同的有3条,那么按规则1,排完了 6条,剩下3条按规则2排?也就是:
    IF 表中有Name重复的记录
        WHILE 重复的记录未排完
            按规则一排
        按规则2排
    Else
        按规则2排是这样吧。20分太少了,花不来,不做,其实就是写循环,没意思。
      

  4.   

    如果數據為 
         ID     Name
         1000   glass
         1001   glass
         1003   towel
         1004   glass
         1005   soap
         1006   hook應該為
         1004   glass
         1006   hook
         1003   towel
         1005   glass
         1001   glass
         1000   glass這個才對啊。
      

  5.   

    不好意思,我打错了1005 是soap
         1004   glass
         1006   hook
         1005   soap
         1003   towel
         1001   glass
         1000   glass
      

  6.   

    那就簡單了。
    Create Table A
    (ID Int,
     Name Varchar(10))
    Insert A Select      1000,   'glass'
    Union All Select      1001,   'glass'
    Union All Select      1003,   'towel'
    Union All Select      1004,   'glass'
    Union All Select      1005,   'soap'
    Union All Select      1006,   'hook'
    GO
    Select * From A B Order By (Select Count(ID) From A Where Name=B.Name And ID>=B.ID),Name
    GO
    Drop Table A
    --Result
    /*
    ID Name
    1004 glass
    1006 hook
    1005 soap
    1003 towel
    1001 glass
    1000 glass
    */
      

  7.   

    你說的第二種情況也可以用這條語句Create Table A
    (ID Int,
     Name Varchar(10))
    Insert A Select      1001,   'glass'
    Union All Select      1002,   'mxxxj'
    Union All Select      1003,   'hikj'
    Union All Select      1004,   'vxvde'
    Union All Select      1005,   'lvvvv'
    Union All Select      1006,   'bxxc'
    GO
    Select * From A B Order By (Select Count(ID) From A Where Name=B.Name And ID>=B.ID),Name
    GO
    Drop Table A
    --Result
    /*
    ID Name
    1006 bxxc
    1001 glass
    1003 hikj
    1005 lvvvv
    1002 mxxxj
    1004 vxvde
    */
      

  8.   

    fcuandy(要学的东西还很多) ,你再看看他後面的回復吧。
      

  9.   

    fcuandy(要学的东西还很多) ( ) 信誉:100  2006-7-7 16:09:38  得分: 0  
     
     
       
    那就不知道他在说什么了。自己说的要循环排的。幸亏我没写,要不然,他说你这样写是对的,我要吐血了。  
     
    ----------------------------------------
    我這寫的也是類似一個循環的.還有,他開始弄錯了,頂樓的結果和數据都對不上的.