【问题标题】:Summing columns in two tables then joining tables将两个表中的列相加,然后连接表
【发布时间】:2015-04-26 17:08:44
【问题描述】:

我有两个表以相同的方式设置,但具有不同的值。以下是每个示例:

表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

我希望结果表包含所有唯一的日期代码对,表之间的任何重复项都具有两个总和的计数。

输出表:

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 语句中执行此操作。

【问题讨论】:

    标签: sql join calculated-columns 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
    

    会成功的。当我在合适的电脑前,我会破解加入版本并编辑这篇文章

    编辑:

    完整的外部连接和 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)
    

    【讨论】:

    • 第一个答案很漂亮。用联合堆叠数据并用聚合将其粉碎。第二个很漂亮,但是如果您的表有任何大小,您的线轴空间将会非常非常不愉快。
    • 谢谢!这解决了它。我没有想到使用工会。我正在摸索 JOIN 逻辑。最佳答案对我来说非常有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多