SELECT (SELECT COUNT(*) + 1
          FROM 表a
          WHERE name = 表a.name AND id > 表a.id) AS autoid, id, name
FROM 表a
ORDER BY autoid, id表a
ID      Name      address
1       li        beijing
2       li        shanghai
3       li        tianjin                
4       gao       shijiazhuan
5       gao       taiyuan
6       gao       beijing
7       wang      wuhan
8       wang      huangshi
9       wang      chengdu
autoid究竟是干吗用的?想了半天不明白,哪位大侠指点一下,感激不尽

解决方案 »

  1.   

    (SELECT COUNT(*) + 1
              FROM 表a
              WHERE name = 表a.name AND id > 表a.id)
    这条语句会返回一个结果,这个结果要显示出来用什么列名表示呢?
    autoid 就是给它起了一个别名,临时给的
    如果没有就显示无列名,那么ORDER BY后面就没法子用这一列来排序了autoid就是一个别名,前面的 AS 可有可无随意了
      

  2.   

    .....樓主剛才發的貼子裏面不是已經有人解釋了嗎以下引用 http://community.csdn.net/Expert/topic/5637/5637640.xml?temp=.4944116
    21樓 AzraeLN(@_@) 的回復
    -------------------------------------------------------------拜读了一下
    select *  from T order by (select count(*) from T a where a.name=t.name and   a.id <=T.id) ,id
    果然好,
    select count(*) from T a where a.name=t.name and   a.id <=T.id
    就是计算出按id来包括在name在内 这个name之前出现了多少次
      

  3.   

    楼主的语句会报错吧怎么能对别名Order by呢?
      

  4.   

    echiynn,想请教一下,你说的表a 和表t(T) 是同一个表吧?感觉你的答案挺好.
      

  5.   

    mei  na me  jian de ,jiu shi bie ming ba3?
      

  6.   

    语句的意思是:给相同name的记录自动编号,id最大为1,次大的为2,依次类推
      

  7.   

    Trance(今何安) ( ) 信誉:100    Blog   加为好友  2007-7-5 12:35:31  得分: 0  
     
     
       
    楼主的语句会报错吧怎么能对别名Order by呢?  
     
    ------------
    你的理解有誤, MS SQL中別名可以用來Order By。
      

  8.   

    autoid是这个子查询(SELECT COUNT(*) + 1
              FROM 表a
              WHERE name = 表a.name AND id > 表a.id)
    返回结果的一个别名
      

  9.   

    能對別名排序呀。因為FROM語句執行在前,ORDER BY 語名執行在後。所以別名能ORDER BY