我不知道我是否在这里愚蠢,但我似乎无法找到一种有效的方法来做到这一点。我编写了一个非常长且效率低下的查询来完成我需要的工作,但我想要的是一种更有效的方法。
我有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)'。
必须有一种更有效的方式,但我现在似乎无法解决这个问题,因为我的放大器运行不足......我需要一个假期...: - /
提前致谢!
答案 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;
再见