作者f9968106 (廢宅)
看板Database
標題[SQL ] 如何整合同表格中相同類型卻在不同欄位的資料
時間Sat May 27 22:44:46 2017
資料庫名稱: 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://webptt.com/m.aspx?n=bbs/Database/M.1495896288.A.533.html
1F:推 cutekid: 我也會用 union all 接起來 05/28 00:24
2F:→ SeanBoog: 不同欄位除了union還有別種辦法嗎? 05/28 00:57
3F:→ SeanBoog: 好奇+1 05/28 00:57
4F:→ 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
5F:→ Kanyahi: 啊 抱歉 我理解錯你的需求了 我以為你要把它整理ubion後 05/28 09:52
6F:→ Kanyahi: 的table,所以你的作法是每次查詢都建view 然後查完再刪 05/28 09:52
7F:→ Kanyahi: 掉view麼? 05/28 09:52
K大您好,這個檢視表會一直存在,不會DROP掉。
但由於每次查詢的時候,都需要2至3秒的時間才能得到結果。
再加上寫了一大串了SELECT、UNION實在不太美觀,
所以想請教各位前輩們是否有更優雅的做法。
※ 編輯: f9968106 (218.173.17.69), 05/28/2017 10:56:39
8F:→ iFEELing: 寫個VIEW把QUERY藏起來然後補INDEX加速? 05/28 17:36
10F:→ lbeeon: 我試了一下這樣沒問題 05/29 01:41
lbeeon謝謝,我終於可以不用同一張資料表重複SELECT和UNION了,謝謝。
※ 編輯: f9968106 (218.166.144.30), 05/29/2017 11:30:49
11F:推 cutekid: 推 lbeeon 上面的解法喔(讚) 05/29 17:14
12F:→ Kanyahi: 受教了 原來還有unpivot這種寫法 感謝樓上賜教 感覺很優 05/29 19:23
13F:→ Kanyahi: 雅的 錯樓了 是指lbeeon的寫法 05/29 19:25
14F:推 chocopie: 推 05/29 22:18
15F:推 ken218: 推+1 05/30 17:40