客户提的要求:有职工情况表,含有身份证号码、姓名、性别、类别、状态等,其中类别的意思是指职工是本市城镇职工、本地农民工、外地城镇职工或外地农民工,状态是指在职或离职。现在客户要求先按本市城镇职工->外地城镇职工->本地农民工->外地农民工排序,然后在职工类别排序基础上再按在职->离职排序,最后在前两次排序的基础上再按身份证号码升序排序。大家说这个排序能实现吗?如果能,请给出代码!多谢!

解决方案 »

  1.   

    select *
    from employees
    order by 类别,状态,身份证号码
      

  2.   

    排序的目的无非是分组显示吧!虽然不能用sql语句直接实现,可以用程序控制显示顺序阿!
    我想这个不难吧!
      

  3.   

    order by 类别,状态,身份证号码 是排序
      

  4.   

    就是一条普通的order by 语句吧,such as:
    select *,类别2=(case 类别 when '本市城镇职工' then 1 when '外地城镇职工' then 2 when '本地农民工' then 3 else 4 end),状态2=(case 状态 when '在职' then 1 else 2 end) from tg_deedstate order by 类别2,状态2,身份证号码
      

  5.   

    order by 类别,状态,身份证号码 
      

  6.   

    按楼主所说按分组(order by)排序呗……
      

  7.   

    select * from mployees order by 状态,身份证号码 where 类别 = '本市城镇职工'
    union
    select * from mployees order by 状态,身份证号码 where 类别 = '外地城镇职工'
    union
    select * from mployees order by 状态,身份证号码 where 类别 = '本市农民工'
    union
    select * from mployees order by 状态,身份证号码 where 类别 = '外地农民工'
      

  8.   

    select 身份证号码、姓名、性别, 类别, 状态 
      from
    (select 身份证号码、姓名、性别, 类别, 状态
           decode(类别,'市城镇职工',1
       '外地城镇职工',2
       '本地农民工',3
       '外地农民工',4) as 类别代码, 
           decode(状态,'在职',1
       '离职',2) as 状态代码
        from 职工情况表) t
        order by t.类别代码, t.状态代码, t.身份证号码
      

  9.   

    同意  wuyi8808(air|skyiv.com)
      

  10.   

    上面的是Oracle语句。
    如果是SQL Server的话,恐怕就得:
    select 身份证号码、姓名、性别, 类别, 状态
      from 职工情况表 
        where 类别='市城镇职工'
          order by 状态,身份证号码
    union
    select 身份证号码、姓名、性别, 类别, 状态
      from 职工情况表 
        where 类别='外地城镇职工'
          order by 状态,身份证号码
    union
    select 身份证号码、姓名、性别, 类别, 状态
      from 职工情况表 
        where 类别='本地农民工'
          order by 状态,身份证号码
    union
    select 身份证号码、姓名、性别, 类别, 状态
      from 职工情况表 
        where 类别='外地农民工'
          order by 状态,身份证号码
      

  11.   

    select *
    from employees
    order by 类别,状态,身份证号码
    order by 排序是有先后之分的,相当于优先级的问题,写在前面的级别高,后面的级别低,如果相同的情况下,则按照后面的莱排序
      

  12.   

    这个有那么难吗?建议楼主将 职工类别、在职离职 都用代码表示。如 01--本市城镇职工
    02--本地农民工
    03--外地城镇职工
    04--外地农民工01--在职
    02--离职然后直接使用以下SQL即可:SELECT * FROM Employees
     ORDER BY 职工类别,状态,身份证强烈建议:像楼主这样的职工类别一类的分类信息都要采用代码来管理。
      

  13.   

    select e.姓名, t.名称 as 类别, s.名称 as 状态, e.身份证号码
    from 职员表 e
    join 类别表 t on e.类别码 = t.代码
    join 状态表 s on e.状态码 = s.代码
    order by e.类别码, e.状态码, e.身份证号码
    职员表:身份证号码         姓名     性别 类别码 状态码
    ------------------ -------- ---- ------ ------
    620203750405001    张三     1    2      2
    55020319750405002X 李四     0    1      1
    类别表:代码 名称
    ---- ------------
    1    本市城镇职工                                                                                                :
    2    本地农民工
    3    外地城镇职工
    4    外地农民工
    状态表:代码 名称
    ---- ----
    1    在职
    2    离职
      

  14.   

    select e.姓名, t.名称 as 类别, s.名称 as 状态, e.身份证号码
    from 职员表 e
    join 类别表 t on e.类别码 = t.代码
    join 状态表 s on e.状态码 = s.代码
    order by e.类别码, e.状态码, e.身份证号码
    职员表:身份证号码         姓名     性别 类别码 状态码
    ------------------ -------- ---- ------ ------
    620203750405001    张三     1    2      2
    55020319750405002X 李四     0    1      1
    类别表:代码 名称
    ---- ------------
    1    本市城镇职工
    2    本地农民工
    3    外地城镇职工
    4    外地农民工
    状态表:代码 名称
    ---- ----
    1    在职
    2    离职