試試看...
Select t1.DataID, IsNull(t1.Value1,t2.Value1), IsNull(t1.Value2, t2.Value2)
From Temp1 t1
Join Temp2 t2 on t1.DataID = t2.DataID
※ 引述《Eleganse (王建民)》之銘言:
: 各位大大好,我先將專案目前的情況與遇到的難題簡述如下。
: 我使用的是Microsoft SQL
: 有一個資料表(Table.Data),每隔數日必須接收數億筆數據資料。
: 它的欄位可以下方表示。
: ===============================================
: Table.Data 共三欄
: 欄位名 Col.DataID Col.Value1 Col.Value2
: 型態 int float float
: ===============================================
: 又Value1與Value2 的數據來源為不同儀器,因此資料集的初始狀態如下(示例)
: (實際上是14欄共14種儀器)
: ====================================
: Table.Temp1(暫存表格)
: Col.DataID Col.Value1 Col.Value2
: 1 0.000001 NULL
: 2 0.000002 NULL
: ... ... ...
: (數億筆)
: ====================================
: ====================================
: Table.Temp2(暫存表格)
: Col.DataID Col.Value1 Col.Value2
: 1 NULL 0.999999
: 2 NULL 0.999998
: ... ... ...
: (數億筆但筆數會與Temp1相同)
: ====================================
: 前提是我已運用1.Comparision(壓縮方法)
: 2.資料表分割方法
: 3.建立索引
: 建立此表(Table.Data),
: 我打算不管裡面的數據資料成長得多大,都放在同一張表格裡,
: 以便於查詢與後續數據分析工作。
: 首先遇到的第一個難題,是如何在原本已有數十億筆資料的表格中,
: "非常有效率地"再插入數億筆資料?
: 我想到sqlbulkcopy方法,但bcp方法的限制為,"原先的表格必須是空的",
: 所以我想到一個解決方法:
: 就是先建立一個暫存表格存最新數據,再將舊表與暫存表格合併起來,
: 但是表格的合併問題讓我很苦惱,
: 我查了union與join兩種方法,
: union方法會讓數據集變成下面的長相
: Col.DataID Col.Value1 Col.Value2
: 1 0.000001 NULL
: 1 NULL 0.999999
: 2 0.000002 NULL
: 2 NULL 0.999998
: 而full join方法會讓數據集
: Col.DataID Col.Value1 Col.Value2 Col.DataID Col.Value1 Col.Value2
: 1 0.000001 NULL 1 NULL 0.999999
: 2 0.000002 NULL 2 NULL 0.999998
: 兩種都不是我要的
: Col.DataID Col.Value1 Col.Value2
: 1 0.000001 0.999999
: 2 0.000002 0.999998
: 最終長相。
: 所以可否請教各位大大
: 1.用什麼TQL指令的結合,可以正確生成我要的最終表格樣貌?
: 2.回歸本問題的前點,我硬將數十億筆資料塞進一張表中,
: 會不會造成什麼無法預期的後果?(在我已經將該表效率最佳化的情況下)
: 3.回歸到本問題的初始狀態,是否有其它通行的解決方法,
: 可以解決"在數十億筆資料中再插入數億筆資料"的存取效率方法?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.158.41.245