我有2个表,它们具有相同的userID,类别,计数模式。我需要一个查询来汇总每个userID /类别对的计数。有时一对将存在于一个表中而不是另一个。我在进行连接时遇到麻烦,同时又不会丢失其中userID /类别对仅存在于1个表中的行。这是我正在尝试的方法(没有成功):

select a.user, a.category, count=a.count+b.count
from #temp1 a join #temp2 b
on a.user = b.user and a.category = b.category

例:

输入:
user    category    count
id1     catB        3
id2     catG        9
id3     catW        17

user    category    count
id1     catB        1
id2     catM        5
id3     catW        13

所需输出:
user    category    count
id1     catB        4
id2     catG        9
id2     catM        5
id3     catW        30

更新:“count”不是实际的列名称。在本示例中,我只是使用它,而忘记了它是保留字。

最佳答案

你需要:

  • 使用完整的外部联接,这样您就不会删除一个表中存在的行,而不是另一个
  • 合并之前会计数,因为0 + NULL = NULL

  • 另外,因为COUNT是保留字,所以我建议将其转义。

    因此,使用所有这些准则,您的查询将变为:
    SELECT COALESCE(a.user, b.user) AS user,
           COALESCE(a.category, b.category) AS category,
           COALESCE(a.[count],0) + COALESCE(b.[count],0) AS [count]
    FROM #temp1 AS a
    FULL OUTER JOIN #temp2 AS b
                 ON a.user = b.user AND
                    a.category = b.category
    

    关于sql - SQL连接而不会丢失行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17578744/

    10-16 11:52