0

我有类似于以下信息的表格:

表 A 是电路列表:

Circuit  |  CktType  |  CktSize
--------------------------------
CKT1     |  ABC123   |  10
CKT2     |  ABC123   |  12
CKT3     |  XYZ789   |  10

表 B 是 Raceway 列表:

Raceway  |  RwyType  |  RwySize
--------------------------------
RWY1     |  C        |  4
RWY2     |  T        |  4x6
RWY3     |  T        |  8x12

表 C 是电路如何通过赛道的列表:

Circuit  |  Sequence |  Raceway
--------------------------------
CKT1     |  1        |  RWY1
CKT1     |  2        |  RWY2
CKT1     |  3        |  RWY3
CKT2     |  1        |  RWY2

表 C 可能有也可能没有表 A 和 B 中的所有项目的条目。对于表 A 和 B 中的每个项目,表 C 中没有设定的条目数或最大条目数。

我想在 Oracle 中编写 2 个查询来检索以下数据(显然,这些查询非常相似,所以只是真正寻求帮助编写其中一个)。

所有电路信息以及电路通过的滚道所需的结果:

Circuit  |  CktType  |  CktSize   |  Raceway
----------------------------------------------
CKT1     |  ABC123   |  10        | RWY1, RWY2, RWY3
CKT2     |  ABC123   |  12        | RWY2
CKT3     |  XYZ789   |  10        | (null)

所有赛道信息以及赛道中的赛道: 期望的结果:

Raceway  |  RwyType  |  RwySize  |  Circuit
----------------------------------------------
RWY1     |  C        |  4        | CKT1
RWY2     |  T        |  4x6      | CKT1, CKT2
RWY3     |  T        |  8x12     | CKT1

提前致谢。

4

2 回答 2

1

这将是您的两个查询之一。这会产生每个电路信息以及用逗号分隔的 Raceway 序列。检查一下。

  SELECT Circuit,
         CktType,
         CktSize,
         RTRIM (
            XMLAGG (XMLELEMENT (e, Raceway || ', ') ORDER BY Sequence).EXTRACT (
               '//text()'),
            ', ')
            Raceways
    FROM (SELECT t_A.Circuit,
                 t_A.CktType,
                 t_A.CktSize,
                 t_C.Raceway,
                 t_c.Sequence
            FROM    tableA t_A
                 LEFT OUTER JOIN
                    tableC t_C
                 ON t_A.Circuit = t_C.Circuit)
GROUP BY Circuit;
于 2013-09-18T19:31:26.647 回答
0

编辑:重新阅读您的帖子后,我意识到这对您不起作用。尝试“对于 XML 路径”。这是一个很好的例子:sql-query-concatenating-results-into-one-string

于 2013-09-18T19:00:34.013 回答