Asd*_*dfg 4 sql-server group-by inner-join
我有两个表定义相同的表.
T1:
Name VARCHAR(50)
Qty INT
T2:
Name VARCHAR(50)
Qty INT
Run Code Online (Sandbox Code Playgroud)
这是每个表的数据:
T1:
Name Qty
a 1
b 2
c 3
d 4
T2:
Name Qty
a 1
b 3
e 5
f 10
Run Code Online (Sandbox Code Playgroud)
我希望得到的结果可以根据名称从两个表中加总数量.
预期结果集:
Name TotalQty
a 2
b 5
c 3
d 4
e 5
f 10
Run Code Online (Sandbox Code Playgroud)
如果我做左连接或右连接,它不会从任何一个表返回我的名字.
我在想的是创建一个临时表并添加这些记录,并在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
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我,如果创建一个临时表是好的还是有更好的方法来做到这一点?
Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)
看到它在线工作:sqlfiddle
您可以使用a UNION 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]
Run Code Online (Sandbox Code Playgroud)