SQL Group by with merge

时间:2018-05-23 15:01:19

标签: sql oracle

我有两个要合并的表,如下所示:

C1  C2           V1   V2
1   A            3    5
2   B            4    6

我想将第二个表中的所有行追加到第一个表中的每一行。 我想实现一些链接:

C1  C2  C3  C4  C5  C6
1   A   3   5   4   6
2   B   3   5   4   6   

可以在OracleDB中完成吗? 或者我应该进行两次查询并将其合并到我的代码中。

2 个答案:

答案 0 :(得分:0)

似乎你想要 window 这样的功能

select min(c1) over () c1, min(c2) over () c2, max(c2) over () c3
from table t;

答案 1 :(得分:0)

嗯。嗯。 。 。这很奇怪。如果第二个表中有两行,则可以使用条件聚合:

select t1.*, t2.*
from t1 cross join
     (select max(case when seqnum = 1 then v1 end) as v1_1,
             max(case when seqnum = 1 then v2 end) as v2_1,
             max(case when seqnum = 2 then v1 end) as v1_2,
             max(case when seqnum = 2 then v2 end) as v2_2             
      from (select t2.*, row_number() over (order by null) as seqnum
            from t2
           ) t2
     ) t2;

您可以手动将其扩展到更多行。

如果您有不确定的行数,则无法使用简单的SQL查询执行所需的操作。 SELECT语句具有固定的行集。您可以使用动态SQL(execute immediate)执行您想要的操作。

或者,您可能只想对table2值使用另一种表示形式,例如JSON,XML或嵌套表。