0

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

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

结果集 1

ID 标志
1 V
2 V
3 V
4 V
5 V
6 V

结果集 2

ID 标志
2 A
5 A
7 A
8 A

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

ID 标志
1 V
2 (V/A)
3 V
4 V
5 (V/A)
6 V
7 A
8 A

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

我目前正在对两组进行联合以获取所有 ID。此后,我通过使用 case 语句离开加入 2 个结果集以获取所需的 '(V/A)'。

必须有一种更有效的方法,但我现在似乎无法弄清楚,因为我的放大器电量不足......我需要一个假期......:-/

提前致谢!

4

2 回答 2

1

使用完全外连接:

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

请参阅此 SQLFiddle

分享和享受。

于 2013-07-23T15:48:46.850 回答
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;

再见

于 2013-07-23T14:31:54.120 回答