我的表格信息类似于以下内容:
表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中所有项目的条目。表C中没有表A和B中每个项目的设置编号或最大条目数。
我想在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
提前致谢。
答案 0 :(得分: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;
答案 1 :(得分:0)