2015-02-24 100 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