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 明白了吧