将两列中的列相加然后连接表

时间:2015-02-24 21:25:29

标签: sql join calculated-columns proc-sql

我有两个表以相同的方式设置,但具有不同的值。以下是各自的样本:

表1:

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

表2:

Date        Code       Count
1/1/2015    AA         1
1/2/2015    AA         0
1/4/2015    AB         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 个答案:

答案 0 :(得分:1)

我现在正在路上所以我没有跑过这个,但是:

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

会做的伎俩。当我走进一台合适的计算机时,我会对连接版本有所了解并编辑这篇文章

编辑:

全外连接和COALESCE也会这样做,虽然速度稍慢,所以它可能取决于你在那里还有什么!

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)