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究竟是干吗用的?想了半天不明白,哪位大侠指点一下,感激不尽
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究竟是干吗用的?想了半天不明白,哪位大侠指点一下,感激不尽
FROM 表a
WHERE name = 表a.name AND id > 表a.id)
这条语句会返回一个结果,这个结果要显示出来用什么列名表示呢?
autoid 就是给它起了一个别名,临时给的
如果没有就显示无列名,那么ORDER BY后面就没法子用这一列来排序了autoid就是一个别名,前面的 AS 可有可无随意了
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之前出现了多少次
楼主的语句会报错吧怎么能对别名Order by呢?
------------
你的理解有誤, MS SQL中別名可以用來Order By。
FROM 表a
WHERE name = 表a.name AND id > 表a.id)
返回结果的一个别名