2011-10-21 187 views
6

編輯: 嘗試使用COALESCE方法後,我現在看到一個問題,即每個瓦數類別的數據都使用相同的數據重複其自身。第2列是瓦數。 enter image description here以不同的數據連接兩個相同的表結構

我創建了兩個具有完全相同表結構的臨時表。在這些表格中,有多個列可以具有相同的值,然後是具有不同數字的幾個值列。其中一些在一列中將爲NULL,而在另一列中不爲空。我想把所有的值都放在一起,並且在同一個站點和工廠的行上我想要加入的值。

下面是這兩個表可能看起來像什麼,結果我期望

TABLE1一個例子:

SITE  PLANT   VALUE_1   VALUE 2 
S1  P1    54    66 
S1  P2    43    43 

表2:

SITE  PLANT   VALUE_1   VALUE_2 
S1  P1   33    43 
S2  P1   34    22 

結果:

SITE  PLANT   t1_VALUE_1 t1_VALUE_2 t2_VALUE_1  t2_VALUE2 
S1  P1   54   66   33    43 
S1  P2   43   43   NULL   NULL 
S2  P1   NULL   NULL   34    22 

我的原創想法會被完全加入。然而,這不起作用,因爲在你的select語句中,你必須指定從哪裏抓取列,比如站點和工廠;但是選擇t1.site和t2.site都會生成兩列。我得到的最接近的是下面的查詢,但是,無論何時在S2中有一個站點和工廠不在S1中的結果,您都會收到S1和S2的空值。

SELECT t1.Site, t1.Plant, t1.Value_1, t1.Value_2, t2.Value_1, t2.Value_2 
FROM table1 t1 
FULL JOIN table2 t2 
ON t1.site = t2.site 
AND t1.plant = t2.plant 
+0

請勿使用HTML標記。使用「格式代碼」圖標粘貼保留空格的表格。 –

+0

@Tom - S1和S2未列爲列或表格。你實際上指的是什麼? –

回答

1

您可以使用coalesce。它將從參數中返回第一個非空值。

SELECT coalesce(t1.Site, t2.Site) as Site, coalesce(t1.Plant, t2.Plant) as Plant, 
4

需要兩個技巧來完成此查詢。第一個是FULL JOIN。完全聯接將允許您組合兩個表,並在不匹配聯接條件時將空值插入到任一表中。第二個是COALESCE,它可以讓你從工廠和場地中選擇哪一個表格爲結果中的這一行提供記錄。

SELECT Coalesce(t1.Site,t2.Site) As Site, COALESCE(t1.Plant, t2.Plant) As Plant, 
    t1.Value_1 As t1_Value_1, t1.Value_2 As t1_Value_2, 
    t2.Value_1 As t2_Value_1, t2.Value_2 As t2_Value_2 
FROM Table1 t1 
FULL JOIN Table2 t2 ON t1.Site = t2.Site AND t1.Plant = t2.Plant 
+0

感謝您的輸入,我需要聰明的合併功能。請參閱更新的問題 – Tom

相關問題