作者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/cn.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