Oracle SQL - 将2个表列连接成1行

时间:2015-07-12 06:27:24

标签: sql oracle oracle11g

我有2个SQL,结果很好。它们与这两个查询之间没有关系,但我希望看到单列中的所有行。

e.g。

Select col1,col2,sum(col3) as col3 from table a
select col4,col5 from table b

我希望结果是

col1 col2 col3 col4 col5

如果表a或表b没有等效行,则用零替换。

有人可以帮我解决这个问题。感谢。

3 个答案:

答案 0 :(得分:0)

因为,您没有在每个表中提供表结构或数据等任何信息。你可以cross join两个表。

select t.col1,t.col2,t.col3,t1.col1,t1.col2 from tab1 t,tab2 t1;

<强> SQLFiddle

答案 1 :(得分:0)

在两个select语句中,根据rownumrow_number()添加列,然后使用此列添加full join结果:

select nvl(col1, 0) col1, nvl(col2, 0) col2, nvl(col3, 0) col3, 
       nvl(col4, 0) col4, nvl(col5, 0) col5
  from 
    (select rownum rn, col1, col2, col3 from (
      select col1, col2, sum(col3) col3 from tableA group by col1, col2)) a
  full join (select rownum rn, col4, col5 from tableB) b using (rn)

SQLFiddle demo

答案 2 :(得分:0)

我认为UNION可能是一个实用的解决方案,因为2个查询不相关。它们只是2个数据集,应该在一个语句中检索:

Select col1,col2,sum(col3) as col3 from table a
UNION
select col4,col5, to_number(null) col6  from table b

请注意示例中的col6。 SQL坚持在UNION语句中检索相等的列。检索具有完全相同datatype的列是一种很好的做法。由于sum(col3)将产生number datatype列,col6也应该。

col4和col5的结果将显示在col1和col2中。