A表:   
  user name value
    
  a name1 300
  a name2 100
  a name3 100
  b name4 600
  b name6 300
  b name7 300
  c name8 400想要的结果 根据user分类加id号,而且保持value还是按降序排列(按升序也一样,保持一致就行) 注意:value 值有相同的情况, 并且是在sql2000下执行的   id user name value
    
  1 a name1 300
  2 a name2 100
  3 a name3 100
  1 b name4 600
  2 b name6 300
  3 b name7 300
  1 c name8 400

解决方案 »

  1.   

    SELECT ID=(SELECT COUNT(1)+1 FROM #tp p  
                WHERE p.[user]=t.[user] AND NAME<t.NAME)
    ,[user], name ,value
    FROM #tp tID         user       name       value
    ----------- ---------- ---------- -----------
    1           a          name1      300
    2           a          name2      100
    3           a          name3      100
    1           b          name4      600
    2           b          name6      300
    3           b          name7      300
    1           c          name8      400(7 row(s) affected)
      

  2.   

    这样的话,能保持value保持降序排列吗
      

  3.   

    如果原来value并不是正常排序,是乱的,现在的情况下,同时要求排序的话,改怎么解决呢
      

  4.   

    create table A([user] varchar(10), name varchar(10),value int)
    insert into a values('a', 'name1', 300)
    insert into a values('a', 'name2', 100)
    insert into a values('a', 'name3', 100)
    insert into a values('b', 'name4', 600)
    insert into a values('b', 'name6', 300)
    insert into a values('b', 'name7', 300)
    insert into a values('c', 'name8', 400)
    go--相同user+value合并名次
    select id = (select count(distinct value) from a where [user] = t.[user] and value > t.value) + 1, * from a t
    /*
    id          user       name       value       
    ----------- ---------- ---------- ----------- 
    1           a          name1      300
    2           a          name2      100
    2           a          name3      100
    1           b          name4      600
    2           b          name6      300
    2           b          name7      300
    1           c          name8      400(所影响的行数为 7 行)
    */
    --相同user+value再按照name排名
    select id = (select count(1) from a where [user] = t.[user] and ((value > t.value) or (value = t.value and name < t.name))) + 1,* from a t
    /*
    id          user       name       value       
    ----------- ---------- ---------- ----------- 
    1           a          name1      300
    2           a          name2      100
    3           a          name3      100
    1           b          name4      600
    2           b          name6      300
    3           b          name7      300
    1           c          name8      400(所影响的行数为 7 行)
    */drop table a 
      

  5.   

    前面的id还要参与排序么?如要id也要排序:
    最后加上order by id,value desc如果ID不需要加入排序:
    order by value desc
      

  6.   

    需求有点变化哦,抱歉A表:   
      user name value
        
      a name1 100
      a name2 300
      a name3 100
      b name4 300
      b name6 600
      b name7 300
      c name8 400想要的结果 根据user分类加id号,并且value按降序排列(按升序也一样)  注意:value 值有相同的情况, 并且是在sql2000下执行的  结果如下  id user name value
        
      1 a name1 300
      2 a name2 100
      3 a name3 100
      1 b name4 600
      2 b name6 300
      3 b name7 300
      1 c name8 400
      

  7.   

    create table A([user] varchar(10), name varchar(10),value int)
    insert into a values('a', 'name1', 300)
    insert into a values('a', 'name2', 100)
    insert into a values('a', 'name3', 100)
    insert into a values('b', 'name4', 600)
    insert into a values('b', 'name6', 300)
    insert into a values('b', 'name7', 300)
    insert into a values('c', 'name8', 400)
    go--相同user+value合并名次
    select id = (select count(distinct value) from a where [user] = t.[user] and value > t.value) + 1, * from a t order by t.[user] , id , t.name
    /*
    id          user       name       value       
    ----------- ---------- ---------- ----------- 
    1           a          name1      300
    2           a          name2      100
    2           a          name3      100
    1           b          name4      600
    2           b          name6      300
    2           b          name7      300
    1           c          name8      400(所影响的行数为 7 行)
    */
    --相同user+value再按照name排名
    select id = (select count(1) from a where [user] = t.[user] and ((value > t.value) or (value = t.value and name < t.name))) + 1,* from a t order by t.[user] , id , t.name
    /*
    id          user       name       value       
    ----------- ---------- ---------- ----------- 
    1           a          name1      300
    2           a          name2      100
    3           a          name3      100
    1           b          name4      600
    2           b          name6      300
    3           b          name7      300
    1           c          name8      400(所影响的行数为 7 行)
    */drop table a 
      

  8.   

    SELECT     (SELECT     COUNT(1) AS Expr1
                           FROM          [#TP]
                           WHERE      ([USER] = T.[USER]) AND (VALUE > T.VALUE) OR
                                                  ([USER] = T.[USER]) AND (VALUE = T.VALUE) AND (NAME < T.NAME)) + 1 AS ID, [USER], NAME, VALUE
    FROM         [#TP] AS T
    ORDER BY T.[USER], ID, T.NAMEID          user       name       VALUE
    ----------- ---------- ---------- -----------
    1           a          name2      300
    2           a          name1      100
    3           a          name3      100
    1           b          name6      600
    2           b          name4      300
    3           b          name7      300
    1           c          name8      400(7 row(s) affected)