如何根据当前用户所在地区优先显示本地的信息呢?高手们:如何根据当前用户所在地区优先排列。试过:
SELECT u1.id,a1.id,a1.areaname,u1.name FROM 用户表u1,地区表 a1 WHERE u1.areaid = a1.id AND u1.areaid=21104
UNION
SELECT u1.id,a1.id,a1.areaname,u1.name FROM 用户表u1,地区表 a1 WHERE u1.areaid = a1.id AND u1.areaid!=21104;这么查出来结果是无序的。不是首先显示u1.areaid是21104,之后再显示非21104的记录。我想要的结果是:如果我在北京用户:显示:北京 部门A 姓名A 
北京 部门A 姓名B
北京 部门A 姓名C
上海 部门A 姓名A 
上海 部门A 姓名B
上海 部门A 姓名C如果我是上海用户:显示:上海 部门A 姓名A 
上海 部门A 姓名B
上海 部门A 姓名C
北京 部门A 姓名A 
北京 部门A 姓名B
北京 部门A 姓名C如何实现呢?感谢各位给指点指点!

解决方案 »

  1.   

    用union all 并在第二个集合里边按照 t.areaid排一下序试试
    SELECT u1.id,a1.id,a1.areaname,u1.name FROM 用户表u1,地区表 a1 WHERE u1.areaid = a1.id AND u1.areaid=21104
    UNION ALL
    SELECT * from (u1.id,a1.id,a1.areaname,u1.name FROM 用户表u1,地区表 a1  order by u1.areaid) t WHERE t.areaid = a1.id AND t.areaid!=21104;
      

  2.   


    按照这个查。在执行UNION ALL下的SELECT语句时,这条查询语句有重复数据。--select * from workorders_user t
    SELECT u1.id,u1.name,a1.areaname,a1.id FROM workorders_user u1,workorders_area a1 WHERE u1.areaid = a1.id AND u1.areaid=21102
    UNION ALL
    SELECT t.id,t.name,a1.areaname,a1.id FROM(SELECT u1.* FROM workorders_user u1,workorders_area a1 ORDER BY u1.areaid) t,workorders_area a1 WHERE t.areaid = a1.id AND t.areaid!=21102;但是去掉UNION ALL的ALL后。它就又是无序的排列了。
      

  3.   

    select distinct * from
    (
    select 
    SELECT u1.id,a1.id,a1.areaname,u1.name FROM 用户表u1,地区表 a1 WHERE u1.areaid = a1.id AND u1.areaid=21104
    UNION ALL
    SELECT u1.id,a1.id,a1.areaname,u1.name FROM 用户表u1,地区表 a1 WHERE u1.areaid = a1.id AND u1.areaid!=21104
    );
      

  4.   

    用这个可以:
    SELECT u1.id,a1.id,a1.areaname,u1.name FROM 用户表u1,地区表 a1 WHERE u1.areaid = a1.id order by decode(u1.areaid,21104,1,u1.areaid)