4

我有两个具有相同定义的表。

T1:
Name VARCHAR(50)
Qty  INT

T2:
Name VARCHAR(50)
Qty  INT

这是每个表的数据:

T1:
Name   Qty
a   1
b   2
c   3
d   4

T2:
Name   Qty
a   1
b   3
e   5
f   10

我希望得到可以根据名称对两个表中的数量求和的结果。

预期结果集:

Name    TotalQty
a             2
b             5
c             3
d             4
e             5
f            10

如果我做左连接或右连接,它不会从任何一个表中返回我的名称。

我在想的是创建一个临时表并添加这些记录,然后在 Qty 列上进行 SUM 聚合,但我认为应该有更好的方法来做到这一点。

这就是我的查询不返回预期结果集的样子:

SELECT t1.Name, ISNULL(SUM(t1.Qty + t2.Qty),0) TotalQty
FROM t1
LEFT JOIN t2
ON t1.Name = T2.Name
GROUP BY t1.Name

有人可以告诉我在这里创建临时表是否可以,或者有更好的方法吗?

4

2 回答 2

10

您可以使用完整的外部联接:

SELECT
    ISNULL(t1.Name, t2.Name) AS Name,
    ISNULL(t1.Qty, 0) + ISNULL(t2.Qty, 0) AS TotalQty
FROM t1
FULL JOIN t2 ON t1.Name = T2.Name

在线查看它:sqlfiddle

于 2012-09-07T19:18:20.277 回答
7

您可以使用 aUNION ALL来选择两个表作为一个,因为它们具有相同的定义。从那里,您可以将它们嵌套为派生表,然后SUM在此之上:

SELECT [Name], SUM(Qty) AS TotalQty
FROM (
    SELECT [Name], Qty
    FROM t1
    UNION ALL
    SELECT [Name], Qty
    FROM t2
) YourDerivedTable
GROUP BY [Name]
于 2012-09-07T19:16:46.663 回答