iT邦幫忙

1

SQL Server合併雙表多列整合成一列

各位前輩好 最近碰到個SQL Server 合併雙表多列整合的問題
表一: aaa_master
https://ithelp.ithome.com.tw/upload/images/20180508/20090631TMITyNWsOe.jpg

表二: aaa_detai
https://ithelp.ithome.com.tw/upload/images/20180508/20090631ZO2U7odchl.jpg


邏輯是aaa_master.id = aaa_detail.master_record_id

而每一組相同的 aaa_detail.master_record_id 所含的 vital_type_id 都只會有一次

原始資料表aaa_detail內是多列組合,我想整合成一列如下圖DEMO結果
https://ithelp.ithome.com.tw/upload/images/20180508/20090631PB2shAxcx6.jpg


隨文附上兩個範例資料表,跪求先進踴躍參與討論或不吝解答

範例資料表

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
fuzzylee1688
iT邦研究生 3 級 ‧ 2018-05-08 16:01:27
最佳解答

試看看..
SELECT ID, MEASURE_TIME
,MAX(CASE WHEN B.VITAL_TYPE_ID = '0001' THEN B.VALUE ELSE NULL END) "0001"
,MAX(CASE WHEN B.VITAL_TYPE_ID = '0002' THEN B.VALUE ELSE NULL END) "0002"
.....
FROM AAA_MASTER A
JOIN AAA_DETAIL B
ON A.id = B.master_record_id
GROUP BY ID, MEASURE_TIME

badbayz iT邦新手 4 級 ‧ 2018-05-08 16:29:23 檢舉

我居然沒想到MAX搭配CASE 哈哈 受教了 非常感恩^_^

石頭 iT邦高手 1 級 ‧ 2018-05-08 21:26:48 檢舉

如果 VITAL_TYPE_ID 有索引 可以在Where語句那邊做條件篩選,這可提升查詢效能

Where VITAL_TYPE_ID in ('0001','0002',.....)

2
石頭
iT邦高手 1 級 ‧ 2018-05-08 20:57:28

SQLServer 你可以使用 PIVOT 樞紐分析

SELECT *
FROM (
	SELECT a.measure_time,B.master_record_id,B.[value],b.sugar_period,b.vital_type_id
	FROM AAA_MASTER A
	JOIN AAA_DETAIL B ON A.id = B.master_record_id
) t
PIVOT(
	SUM(t.[value]) FOR t.vital_type_id IN ([0001],[0002]....)
) p1

pivot

Note : PIVOT 中間我使用SUM聚集函式 原因是可能同一天 同vital_type_id有兩筆value 要把他們加總

badbayz iT邦新手 4 級 ‧ 2018-05-08 23:41:23 檢舉

這個太厲害了,值得收藏深入學習,感謝無私分享/images/emoticon/emoticon02.gif

我要發表回答

立即登入回答