sql聚合选择结果

dtj*_*msy 3 sql sql-server

我想汇总我的所有选择结果:

我有一个select user result1 from....)返回的2列:

user   results1
****   ********
user1  5
user2  8
Run Code Online (Sandbox Code Playgroud)

我还有另一个查询select user result2 from....)返回另外两列:

user   results2
****   ********
user1  9
user2  5
user3  15
Run Code Online (Sandbox Code Playgroud)

我如何将结果与3列一起加入以构成如下内容:

user   results1   results2
****   ********   ********
user1  5          9
user2  8          5
user3            15
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 5

如果您不确定User两个表中是否存在该值,则应使用a FULL JOIN来查询表.A FULL JOINFULL OUTER JOIN(OUTER是可选的)将返回两个表中的行,但如果user其中一个表中不存在,则仍会得到结果:

select 
  [user] = coalesce(r1.[user], r2.[user]),
  r1.results1,
  r2.results2
from result1 r1
full join result2 r2
  on r1.[user] = r2.[user];
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo.

使用a的问题INNER JOIN是它需要User两个表都在.如果您尝试使用RIGHT JOINLEFT JOIN- 那么您可能仍然无法返回所有用户及其结果.

如果您要尝试合并多个查询,则可以使用CTE或子查询:

;with query1 as
(
  select [user], result1 from results1
),
query2 as
(
  select [user], result2 from results2
)
select 
  [user] = coalesce(q1.[user], q2.[user]),
  q1.result1,
  q2.result2
from query1 q1
full join query2 q2
  on q1.[user] = q2.[user]
Run Code Online (Sandbox Code Playgroud)