[SQL ] 如何整合同表格中相同類型卻在不同欄位的資料

看板Database作者 (廢宅)時間7年前 (2017/05/27 22:44), 7年前編輯推噓5(5010)
留言15則, 7人參與, 最新討論串1/1
資料庫名稱: 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

05/28 00:24, , 1F
我也會用 union all 接起來
05/28 00:24, 1F

05/28 00:57, , 2F
不同欄位除了union還有別種辦法嗎?
05/28 00:57, 2F

05/28 00:57, , 3F
好奇+1
05/28 00:57, 3F

05/28 01:36, , 4F
開個新資料表 SELECT Data insert into到新資料表 如何?
05/28 01:36, 4F
這樣我怕會有不同步的問題。而且實際的狀況很糟,因為這樣的資料表共有三個。 除了UNION自身欄位外,還得UNION其他外部表格才算是取得所有紀錄在案的車牌資料。 所以我總共得SELECT 15次資料表再將這些結果UNION起來, 但這種做法理所當然的耗費了許多時間成本在裏頭。 雖然我的想法是重新規劃這些資料表,但上級礙於有不少檢視表參照了這三張資料表, 於是拒絕了這項建議,讓我再想想辦法。 目前我先開了一張檢視表來解決煩人的SELECT和UNION問題, 但查詢時間過長的問題仍有待解決。 ※ 編輯: f9968106 (218.173.17.69), 05/28/2017 08:18:10

05/28 09:52, , 5F
啊 抱歉 我理解錯你的需求了 我以為你要把它整理ubion後
05/28 09:52, 5F

05/28 09:52, , 6F
的table,所以你的作法是每次查詢都建view 然後查完再刪
05/28 09:52, 6F

05/28 09:52, , 7F
掉view麼?
05/28 09:52, 7F
K大您好,這個檢視表會一直存在,不會DROP掉。 但由於每次查詢的時候,都需要2至3秒的時間才能得到結果。 再加上寫了一大串了SELECT、UNION實在不太美觀, 所以想請教各位前輩們是否有更優雅的做法。 ※ 編輯: f9968106 (218.173.17.69), 05/28/2017 10:56:39

05/28 17:36, , 8F
寫個VIEW把QUERY藏起來然後補INDEX加速?
05/28 17:36, 8F

05/29 01:40, , 9F

05/29 01:41, , 10F
我試了一下這樣沒問題
05/29 01:41, 10F
lbeeon謝謝,我終於可以不用同一張資料表重複SELECT和UNION了,謝謝。 ※ 編輯: f9968106 (218.166.144.30), 05/29/2017 11:30:49

05/29 17:14, , 11F
推 lbeeon 上面的解法喔(讚)
05/29 17:14, 11F

05/29 19:23, , 12F
受教了 原來還有unpivot這種寫法 感謝樓上賜教 感覺很優
05/29 19:23, 12F

05/29 19:25, , 13F
雅的 錯樓了 是指lbeeon的寫法
05/29 19:25, 13F

05/29 22:18, , 14F
05/29 22:18, 14F

05/30 17:40, , 15F
推+1
05/30 17:40, 15F
文章代碼(AID): #1PAP3WKp (Database)