如何使用相同的PK连接(或合并)2个结果集中的值?

时间:2013-07-23 14:02:08

标签: plsql plsqldeveloper

我不知道我是否在这里愚蠢,但我似乎无法找到一种有效的方法来做到这一点。我编写了一个非常长且效率低下的查询来完成我需要的工作,但我想要的是一种更有效的方法。

我有2个结果集显示一个ID(两个集合中来自同一来源的PK)和一个FLAG(A - 批准和V - 验证)。

结果集1

ID FLAG
1个
2个V
3个V
4V的
5个V
6 V

结果集2

ID FLAG
2甲
5.一种
7.一种
8.一种

我想“合并”这两组来给我这个输出:

ID FLAG
1个
2(V / A)
3个V
4V的
5(V / A)
6个V
7.一种
8.一种

两个结果集中的任何一个都不会具有所有ID,以便在另一个结果集上使用case语句进行简单的左连接,这是一个简单的解决方案。

我目前正在两组之间建立联盟以获得所有ID。此后,我离开了加入2个结果集,通过使用案例陈述获得所需的'(V / A)'。

必须有一种更有效的方式,但我现在似乎无法解决这个问题,因为我的放大器运行不足......我需要一个假期...: - /

提前致谢!

2 个答案:

答案 0 :(得分:1)

使用FULL OUTER JOIN:

SELECT ID,
       CASE
         WHEN t1.FLAG IS NULL THEN t2.FLAG
         WHEN t2.FLAG IS NULL THEN t1.FLAG
         ELSE '(' || t1.FLAG || '/' || t2.FLAG || ')'
       END AS MERGED_FLAG
  FROM TABLE1 t1
  FULL OUTER JOIN TABLE2 t2
    USING (ID)
  ORDER BY ID

请参阅this SQLFiddle

分享并享受。

答案 1 :(得分:0)

我认为你可以使用xmlagg。这是一个例子:

SELECT deptno,
       SUBSTR (REPLACE (REPLACE (XMLAGG (XMLELEMENT ("x", ename)
                                 ORDER BY ename),'</x>'),'<x>','|'),2)  as concated_list
FROM emp
    GROUP BY deptno
    ORDER BY deptno;

再见