2012-03-04

使用SQL語法將資料轉換為cross table交叉資料表的形式

本範例要使用一個SQLite檔案,在SQLite Database Browser下,來進行資料的轉換示範。
SQLite Database Browser 1.3 Portable免安裝版下載的參考網址:http://files.bod.idv.tw/development/SQLiteDatabaseBrowser
在SQLite Database Browser下,可以建立SQLite資料庫檔檔、建立編輯刪除資料表、新增編輯刪除查詢資料、執行SQL指令...,一個學習SQL指令方常方便的免費小程式!
下載 MakingCrossTable.zip 範例檔案:MakingCrossTable.zip (解壓縮後檔案名稱為MakingCrossTable.db3,可以使用SQLite Database Browser直接開啟這個檔案)

在MakingCrossTable.db3中,包含一個資料表Sign,資料表中的資料欄位,請參閱圖例。
SheetNo:表單號碼,SlotNo:關卡,SignName:簽核人,ReceiveTime:收件時間,SignTime:簽核時間。

在Sign資料表中,包含下列資料:有兩個表單號碼102030301及102030302,每個表單都有三個關卡100/200/300,每筆資料中紀錄了,該表單在某一關卡的簽核人、收件時間、簽核時間。

接下來要透過SQL statements將Sign資料表中的這兩個表單單號的六個關卡簽核紀錄,彙整每個表單所有簽核關卡簽核紀錄,使成為一筆資料。
可以將以下的SQL指令,複製到Execute SQL分頁的SQL string方塊中,然後按下Execute query按鈕,即可檢視彙整後的結果。

select SheetNo,
max(case SlotNo when '100' then SignName else '' end) as U1,
max(case SlotNo when '100' then ReceiveTime else '' end) as R1,
max(case SlotNo when '100' then SignTime else '' end) as S1,
max(case SlotNo when '200' then SignName else '' end) as U2,
max(case SlotNo when '200' then ReceiveTime else '' end) as R2,
max(case SlotNo when '200' then SignTime else '' end) as S2,
max(case SlotNo when '300' then SignName else '' end) as U3,
max(case SlotNo when '300' then ReceiveTime else '' end) as R3,
max(case SlotNo when '300' then SignTime else '' end) as S3
from Sign
group by SheetNo
order by SheetNo


簡單幾行的SQL指令,就可以達到資料彙整的效果,太方便了!

沒有留言:

張貼留言