在网上找了好多资料,才发现有一种是我想要的。但是语句效率不怎样。如下:
----------
我有一张数据表,结构如下:
create Table List
(
name CHAR(20),
local CHAR(20),
age CHAR(20)
)我想要返回的结果集格式为:
按地区排序,但是地区按枚举输出,
每个地区显示一条记录,按地区循环显示,下面只列出了3个地方作例子。
(各地区人数不定也不等,如果该地方没有人可以填充了,就跳过去不显示)
如:
name local age
张三 河北 10
李四 河南 20
王五 山东 18马六 河北 16
刘七 河南 22
赵八 山东 25
. . .
. . .
. . .
Select Name,Local,Age,
XH=(Select Count(*) from List A where A.Local=B.Local and A.Name<B.Name)
from List B order by XH,Local
--------
以上能实现我想要的,但就是数据量大了,会慢,哪位大虾能优化一下呢?还是说能用另外的方式去实现呢?

解决方案 »

  1.   

    Select Name,Local,Age,
    XH=ROW_NUMBER() OVER (PARTITION BY local ORDER BY name)-1
    from List B ORDER BY XH2005以上
      

  2.   

    如果我想加上一列自己定义的字段(sortid),根据sortid大的排前面,该如何实现呢?
    就在上面的例子后面再加上一列
      

  3.   


    我的意思是,比如说 “河南”这个我想排第一,我在河南这个字段后面加上“100”,100是最大的,则 
    name local age
    张三 河南 10
    李四 河北 20
    王五 山东 18马六 河南 16
    刘七 河北 22
    赵八 山东 25