这是不是不可能实现的排序算法?大家发表一下意见!

54783szg 2005-04-25 03:43:58
客户提的要求:有职工情况表,含有身份证号码、姓名、性别、类别、状态等,其中类别的意思是指职工是本市城镇职工、本地农民工、外地城镇职工或外地农民工,状态是指在职或离职。现在客户要求先按本市城镇职工->外地城镇职工->本地农民工->外地农民工排序,然后在职工类别排序基础上再按在职->离职排序,最后在前两次排序的基础上再按身份证号码升序排序。大家说这个排序能实现吗?如果能,请给出代码!多谢!
...全文
174 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
davidyoung821 2005-04-26
  • 打赏
  • 举报
回复
这个帖子为什么没人得分呢????
wuyi8808 2005-04-25
  • 打赏
  • 举报
回复
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 离职
wuyi8808 2005-04-25
  • 打赏
  • 举报
回复
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 离职
raozhiven 2005-04-25
  • 打赏
  • 举报
回复
这个有那么难吗?

建议楼主将 职工类别、在职离职 都用代码表示。如

01--本市城镇职工
02--本地农民工
03--外地城镇职工
04--外地农民工

01--在职
02--离职

然后直接使用以下SQL即可:

SELECT * FROM Employees
ORDER BY 职工类别,状态,身份证

强烈建议:像楼主这样的职工类别一类的分类信息都要采用代码来管理。
jinger007 2005-04-25
  • 打赏
  • 举报
回复
select *
from employees
order by 类别,状态,身份证号码
order by 排序是有先后之分的,相当于优先级的问题,写在前面的级别高,后面的级别低,如果相同的情况下,则按照后面的莱排序
zahuifan 2005-04-25
  • 打赏
  • 举报
回复
上面的是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 状态,身份证号码
piaoyu581 2005-04-25
  • 打赏
  • 举报
回复
同意 wuyi8808(air|skyiv.com)
zahuifan 2005-04-25
  • 打赏
  • 举报
回复
select 身份证号码、姓名、性别, 类别, 状态
from
(select 身份证号码、姓名、性别, 类别, 状态
decode(类别,'市城镇职工',1
'外地城镇职工',2
'本地农民工',3
'外地农民工',4) as 类别代码,
decode(状态,'在职',1
'离职',2) as 状态代码
from 职工情况表) t
order by t.类别代码, t.状态代码, t.身份证号码
davidyoung821 2005-04-25
  • 打赏
  • 举报
回复
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 类别 = '外地农民工'
Liu_Qiang 2005-04-25
  • 打赏
  • 举报
回复
按楼主所说按分组(order by)排序呗……
新鲜鱼排 2005-04-25
  • 打赏
  • 举报
回复
order by 类别,状态,身份证号码

ffjing 2005-04-25
  • 打赏
  • 举报
回复
就是一条普通的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,身份证号码
elite2018 2005-04-25
  • 打赏
  • 举报
回复
order by 类别,状态,身份证号码

是排序
54783szg 2005-04-25
  • 打赏
  • 举报
回复
楼上的是排序吗?好象是分类吧?
chenguang781013 2005-04-25
  • 打赏
  • 举报
回复
排序的目的无非是分组显示吧!虽然不能用sql语句直接实现,可以用程序控制显示顺序阿!
我想这个不难吧!
wuyi8808 2005-04-25
  • 打赏
  • 举报
回复
select *
from employees
order by 类别,状态,身份证号码

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧