2015-02-24 103 views
0

我有兩個表以相同的方式設置,但具有不同的值。下面是樣品從每一個:在兩個表中對列進行求和,然後連接表

表1:

Date  Code  Count 
1/1/2015 AA   4 
1/3/2015 AA   2 
1/1/2015 AB   3 

表2:

​​

我想的結果表以包含所有唯一日期代碼對,用具有表間的任何重複兩者的數量相加。

Output_Table:

Date  Code  Count 
1/1/2015 AA   5 /*Summed because found in Table1 and Table2*/ 
1/2/2015 AA   0 
1/3/2015 AA   2 
1/1/2015 AB   3 
1/4/2015 AB   2 

我沒有主鍵的兩個表連接,並加入我曾嘗試要麼沒有保存所有不同日期代碼對或已經創建重複。

僅供參考,我在SAS proc sql語句中執行此操作。

回答

1

我此刻的道路上,所以我沒有跑這一點,但:

SELECT date , 
     code , 
     SUM([count]) 
FROM (SELECT * 
      FROM  table1 
      UNION ALL 
      SELECT * 
      FROM  table2 
     ) [tables] 
GROUP BY date , 
     code 
ORDER BY date , 
     code 

會做的伎倆。我要在加入版本裂紋,而當我在一個適當的電腦前得到

編輯編輯這篇文章:

完全外連接並凝聚也將做到這一點,雖然是稍微慢一些,所以它可能取決於你在那裏做了些什麼!

SELECT COALESCE(#table1.date, #table2.date) , 
    COALESCE(#table1.code, #table2.code) , 
    ISNULL(#table1.COUNT, 0) + ISNULL(#table2.COUNT, 0) 
FROM #table1 
    FULL OUTER JOIN #table2 ON #table2.code = #table1.code 
           AND #table2.date = #table1.date 
ORDER BY COALESCE(#table1.date, #table2.date) , 
    COALESCE(#table1.code, #table2.code) 
+0

第一個答案很美。使用聯合來堆疊數據並將其聚集在一起。第二個是漂亮的,但如果你的桌子有任何大小,你的假脫機空間將非常非常不快樂。 – JNevill 2015-02-24 22:27:45

+0

謝謝!這解決了它。我沒有想到使用工會。我正在摸索JOIN邏輯。最佳答案對我來說非常合適。 – Max 2015-02-25 13:54:18