sql聚合选择结果

时间:2014-11-19 14:04:15

标签: sql sql-server

我想汇总所有选择结果:

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

user   results1
****   ********
user1  5
user2  8

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

user   results2
****   ********
user1  9
user2  5
user3  15

如何将结果与3列结合起来,以形成如下内容:

user   results1   results2
****   ********   ********
user1  5          9
user2  8          5
user3            15

3 个答案:

答案 0 :(得分:5)

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

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

请参阅SQL Fiddle with Demo

使用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]

答案 1 :(得分:2)

尝试此查询:(因为您想要将两个单独答案的结果与查询结合起来)

SELECT b.User, a.Result1, b.Result2 
from (select user, result1 from....) a
     full outer join (select user, result2 from....) b 
where a.user = b.user

答案 2 :(得分:2)

您应该使用FULL OUTER JOIN

select b.User, a.Result1, b.Result2 
from table1 A
full outer join table2 b 
where a.user = b.user

全外连接只会在表a和b +常见记录中为您提供所有记录。

相关问题