就是一条普通的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,身份证号码
order by 类别,状态,身份证号码
按楼主所说按分组(order by)排序呗……
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 类别 = '外地农民工'
select 身份证号码、姓名、性别, 类别, 状态 from (select 身份证号码、姓名、性别, 类别, 状态 decode(类别,'市城镇职工',1 '外地城镇职工',2 '本地农民工',3 '外地农民工',4) as 类别代码, decode(状态,'在职',1 '离职',2) as 状态代码 from 职工情况表) t order by t.类别代码, t.状态代码, t.身份证号码
同意 wuyi8808(air|skyiv.com)
上面的是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 状态,身份证号码
select * from employees order by 类别,状态,身份证号码 order by 排序是有先后之分的,相当于优先级的问题,写在前面的级别高,后面的级别低,如果相同的情况下,则按照后面的莱排序
这个有那么难吗?建议楼主将 职工类别、在职离职 都用代码表示。如 01--本市城镇职工 02--本地农民工 03--外地城镇职工 04--外地农民工01--在职 02--离职然后直接使用以下SQL即可:SELECT * FROM Employees ORDER BY 职工类别,状态,身份证强烈建议:像楼主这样的职工类别一类的分类信息都要采用代码来管理。
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 离职
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 离职
from employees
order by 类别,状态,身份证号码
我想这个不难吧!
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,身份证号码
union
select * from mployees order by 状态,身份证号码 where 类别 = '外地城镇职工'
union
select * from mployees order by 状态,身份证号码 where 类别 = '本市农民工'
union
select * from mployees order by 状态,身份证号码 where 类别 = '外地农民工'
from
(select 身份证号码、姓名、性别, 类别, 状态
decode(类别,'市城镇职工',1
'外地城镇职工',2
'本地农民工',3
'外地农民工',4) as 类别代码,
decode(状态,'在职',1
'离职',2) as 状态代码
from 职工情况表) t
order by t.类别代码, t.状态代码, t.身份证号码
如果是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 状态,身份证号码
from employees
order by 类别,状态,身份证号码
order by 排序是有先后之分的,相当于优先级的问题,写在前面的级别高,后面的级别低,如果相同的情况下,则按照后面的莱排序
02--本地农民工
03--外地城镇职工
04--外地农民工01--在职
02--离职然后直接使用以下SQL即可:SELECT * FROM Employees
ORDER BY 职工类别,状态,身份证强烈建议:像楼主这样的职工类别一类的分类信息都要采用代码来管理。
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 离职
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 离职