select ID=Dept_ID,Name=Dept_Name
from (
select *,flag=0 from d_dept
union all
select *,1 from d_unit) k
order by left(Dept_ID,3) asc,flag asc,Dept_ID asc
首先通过
select *,flag=0 from d_dept
union all
select *,1 from d_unit
将所有内容合并在一起 这样合一起是乱序的
然后将它作为临时表
from (
select *,flag=0 from d_dept
union all
select *,1 from d_unit) k
注意这里我加个了个FLAG字段 是为了标志0为部门 1为单位 为之后排序做准备
然后利用这个临时表 我进行排序 看下面
select ID=Dept_ID,Name=Dept_Name
这句的意思 理解的吧 选取临时结果集的2个字段,注意这里的Dept_ID和Dept_Name分别语句包含了unit_ID 和unit_Name(这个自己执行下临时结果集就知道了)
我们重点来说排序
order by left(Dept_ID,3) asc,flag asc,Dept_ID asc
先看第一个left(Dept_ID,3) 首先要进行部门排序的 我们是以左边三个符号位排序信息的 排出来就是
001
001001
..
002
..
003
003...
上面的排序不保证每个部门里面的排序时按照部门号先 然后再改部门的单位的顺序 所以加上flag asc
在每组里面 要让部门号先 通过FLAG=0 将部门号放在了前面
所以这里出来:
001
001001
..
002
..
003
003...
请看 在001号部门里面 001 肯定在 001XXX前面了
但是这排序不能保证 001XXX 001XXY这样的单位号排序 就是加上
Dept_ID asc 明白了吧
温馨提示:答案为网友推荐,仅供参考