當前位置:成語大全網 - 新華字典 - 求解SQL數據庫兩張表數據的排序問題

求解SQL數據庫兩張表數據的排序問題

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