看板 Database 關於我們 聯絡資訊
資料庫名稱: SQL Server 資料庫版本: 2008 內容/問題描述: 有一張叫CarTable的資料表,裡面紀錄了客戶名稱及客戶的車牌資料。 現在我想取得所有車牌號碼,但是CarTable卻長這樣: SELECT * FROM CarTable ID | Owner | Number_1 | Number_2 --------------------------------- 1 | John | AB-1234 | NULL --------------------------------- 2 | Tim | CD-5678 | EF-9012 --------------------------------- 3 | Eric | GH-3456 | NULL --------------------------------- 4 | Fred | IJ-7890 | KL-1234 欄位Owner為客戶名稱,Number_1、Number_2則為客戶的車輛號碼。 為了取得所有車牌號碼,我只好分別SELECT Number_1和Number_2兩個欄位, 然後再用UNION的方式把它連結起來,結果如下: SELECT Owner, Number_1 AS Number FROM CarTable UNION ALL SELECT Owner, Number_2 AS Number FROM CarTable WHERE Number_2 IS NOT NULL Owner | Number --------------- John | AB-1234 --------------- Tim | CD-5678 --------------- Tim | EF-9012 --------------- Eric | GH-3456 --------------- Fred | IJ-7890 --------------- Fred | KL-1234 這正是我要的資料,但是現實並非只有Number_1和Number_2兩個欄位而已…… 請問各位前輩,在不改變資料表的結構下是否還有其他做法可以解決這個問題? 感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.173.17.69 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1495896288.A.533.html
cutekid: 我也會用 union all 接起來 05/28 00:24
SeanBoog: 不同欄位除了union還有別種辦法嗎? 05/28 00:57
SeanBoog: 好奇+1 05/28 00:57
Kanyahi: 開個新資料表 SELECT Data insert into到新資料表 如何? 05/28 01:36
這樣我怕會有不同步的問題。而且實際的狀況很糟,因為這樣的資料表共有三個。 除了UNION自身欄位外,還得UNION其他外部表格才算是取得所有紀錄在案的車牌資料。 所以我總共得SELECT 15次資料表再將這些結果UNION起來, 但這種做法理所當然的耗費了許多時間成本在裏頭。 雖然我的想法是重新規劃這些資料表,但上級礙於有不少檢視表參照了這三張資料表, 於是拒絕了這項建議,讓我再想想辦法。 目前我先開了一張檢視表來解決煩人的SELECT和UNION問題, 但查詢時間過長的問題仍有待解決。 ※ 編輯: f9968106 (218.173.17.69), 05/28/2017 08:18:10
Kanyahi: 啊 抱歉 我理解錯你的需求了 我以為你要把它整理ubion後 05/28 09:52
Kanyahi: 的table,所以你的作法是每次查詢都建view 然後查完再刪 05/28 09:52
Kanyahi: 掉view麼? 05/28 09:52
K大您好,這個檢視表會一直存在,不會DROP掉。 但由於每次查詢的時候,都需要2至3秒的時間才能得到結果。 再加上寫了一大串了SELECT、UNION實在不太美觀, 所以想請教各位前輩們是否有更優雅的做法。 ※ 編輯: f9968106 (218.173.17.69), 05/28/2017 10:56:39
iFEELing: 寫個VIEW把QUERY藏起來然後補INDEX加速? 05/28 17:36
lbeeon: http://rextester.com/UIFG16868 05/29 01:40
lbeeon: 我試了一下這樣沒問題 05/29 01:41
lbeeon謝謝,我終於可以不用同一張資料表重複SELECT和UNION了,謝謝。 ※ 編輯: f9968106 (218.166.144.30), 05/29/2017 11:30:49
cutekid: 推 lbeeon 上面的解法喔(讚) 05/29 17:14
Kanyahi: 受教了 原來還有unpivot這種寫法 感謝樓上賜教 感覺很優 05/29 19:23
Kanyahi: 雅的 錯樓了 是指lbeeon的寫法 05/29 19:25
chocopie: 推 05/29 22:18
ken218: 推+1 05/30 17:40