concat sql导致一行Oracle 10g

时间:2016-01-18 16:16:39

标签: sql oracle

我使用的是Oracle 10。 我要在一行中连接两个sql查询的结果。

第一个查询是:

SELECT DISTINCT F.comments from flight F, task WHERE F.id = task.flight_id and task.name like 'BO%' AND F.comments IS NOT NULL

返回:

  

初步评论。

第二个查询(它将结果汇总到一行查询中):

SELECT (RTRIM(XMLAGG(xmlelement(X, T.comments||',')order by F.id).extract('//text()'),',')) list from  flight F, task T  where F.id = T.flight_id and T.name like 'BOS%' AND T.comments IS NOT NULL

返回:

  

第一条评论,第二条评论,第三条评论。

我必须将结果连成一行,所以我做了:

SELECT DISTINCT F.comments from flight F, task WHERE F.id = task.flight_id and task.name like 'BO%' AND F.comments IS NOT NULL
UNION ALL 
SELECT (RTRIM(XMLAGG(xmlelement(X, T.comments||',')order by F.id).extract('//text()'),',')) list from  flight F, task T  where F.id = T.flight_id and T.name like 'BOS%' AND T.comments IS NOT NULL

这会给我两行。第一个关于第一个查询的结果,第二个关于第二个查询。

我想在一行中检索它们,如:

  

初步评论。第一评论。,第二评论。,第三评论。

谢谢!

1 个答案:

答案 0 :(得分:0)

以正确的顺序将两个查询推送到单个子查询中,然后将xmlagg应用于顶部。类似的东西:

SELECT (RTRIM(XMLAGG(xmlelement(X, comments||',')order by sortorder, F.id).extract('//text()'),',')) list
from ( 
SELECT DISTINCT  1 sortorder, 
       f.id,
       F.comments 
  from flight F, task 
  WHERE F.id = task.flight_id 
  and task.name like 'BO%' 
  AND F.comments IS NOT NULL
union all  
SELECT 2, f.id, T.comments 
  from  flight F, task T  
 where F.id = T.flight_id 
 and T.name like 'BOS%' 
 AND T.comments IS NOT NULL  )

(请原谅任何轻微的语法错误 - 我现在离开了我的数据库)