以逗号分隔的列表是在Oracle中执行select语句的结果。

9 浏览
0 Comments

以逗号分隔的列表是在Oracle中执行select语句的结果。

我有一个名为"person"的表。它包含了人员的id和其父id(只能有一个父id)。作为查询的结果,我想要一个表,第一列是人员id,第二列是其子id的列表。具体如何实现呢?我已经了解了listagg函数,但不确定它是否适用于我的目的。而且这个查询会产生一个空的第二列:

select t1.id,

(select t2.id from person t2

where t2.parent_id = t1.id) from person t1

where t1.status = 'parent';

0
0 Comments

问题的出现原因是需要在Oracle数据库中使用SELECT语句生成逗号分隔的列表作为结果。解决方法如下:

SELECT parent_id,max(child_list) FROM (
  SELECT parent_id,sys_connect_by_path(child_number,',') child_list FROM (
    SELECT parent_id, id,
           row_number() over (partition by parent_id order by id) child_number
      FROM person
      WHERE parent_id IS NOT NULL
  )
  START WITH child_number=1
  CONNECT BY parent_id = PRIOR parent_id AND child_number = PRIOR child_number + 1
)
GROUP BY parent_id
ORDER BY parent_id
;

以上代码通过嵌套SELECT语句和CONNECT BY子句实现了逐层连接查询,并使用sys_connect_by_path函数将子节点的编号用逗号连接成列表。最后通过GROUP BY和ORDER BY子句对结果进行分组和排序。

这种方法可以将父节点及其对应的子节点编号列表作为结果返回,方便进行进一步的处理和分析。

0
0 Comments

问题的原因:在Oracle 11GR2版本中,使用LISTAGG函数可以将select语句的结果作为逗号分隔的列表输出。但是在11GR1或者Oracle 10版本中,由于没有LISTAGG函数,需要使用wmsys.wm_Concat函数来实现相同的功能。

解决方法:对于Oracle 11GR2版本,可以直接使用LISTAGG函数来获得逗号分隔的列表输出。而对于11GR1或者Oracle 10版本,可以使用wmsys.wm_Concat函数来实现相同的功能。可能需要向数据库管理员申请权限。

示例代码:

-- Oracle 11GR2
SELECT LISTAGG(column_name, ',') WITHIN GROUP (ORDER BY column_name) AS comma_separated_list
FROM table_name;
-- Oracle 11GR1 or Oracle 10
SELECT wmsys.wm_Concat(column_name, ',') AS comma_separated_list
FROM table_name;

0
0 Comments

问题的出现原因:

问题的出现是因为用户想要从一个包含父子关系的表中查询数据,并将每个父节点的所有子节点的id以逗号分隔的形式返回。用户提供了两个查询语句作为示例,但他们对自己的问题提供的示例不正确。

解决方法:

根据用户的问题描述,我们可以使用以下查询语句来解决问题:

SELECT parent_id,
       RTRIM(XMLAGG(XMLELEMENT(e,child_id || ',')).EXTRACT('//text()'),',') AS "Children"
  FROM parentChildTable
 WHERE status = 'parent'
 GROUP BY parent_id

或者使用以下查询语句:

SELECT parent_id,
       LISTAGG(child_id, ',') WITHIN GROUP (ORDER BY child_id) AS "Children"
  FROM parentChildTable
 WHERE status = 'parent'
 GROUP BY parent_id

这些查询语句将根据指定的条件(status = 'parent')从父子关系表中选择数据,并使用XMLAGG函数或LISTAGG函数将每个父节点的所有子节点的id以逗号分隔的形式返回。

我们建议用户根据自己的需求选择其中一种查询语句,并根据需要调整WHERE条件。

0