Sql Oracle中列的附加值

Sql Oracle中列的附加值,sql,oracle,Sql,Oracle,我的表中有一列保存IP地址。我不知道该列中有多少IP,由于权限问题,我的DBA不会帮助我执行spool toselect*from table 有没有办法附加列值 ID -- Name -- IP 1 ABC 192.168.00.00, 192.168.00.11,... 我想在IP的后面加上逗号分隔符,如下所示 ID -- Name -- IP 1 ABC 192.168.00.00, 192.16

我的表中有一列保存IP地址。我不知道该列中有多少IP,由于权限问题,我的DBA不会帮助我执行spool to
select*from table

有没有办法附加列值

ID   --   Name   --   IP
1         ABC        192.168.00.00, 192.168.00.11,...
我想在IP的后面加上逗号分隔符,如下所示

ID   --   Name   --   IP
1         ABC        192.168.00.00, 192.168.00.11,..., 192.168.00.22

不是100%确定你的意思,但我猜你的IP列存储的是一个IP地址,你想做一个“字符串聚合”来将所有相同ID和名称的IP分组为一个字符串

试试这个

SELECT ID, Name, wm_concat(IP) AS IPs
FROM   table
GROUP BY ID, Name;


还有其他选择

您可以使用listag来实现

比如说,

SQL> SELECT deptno id,
  2    listagg(ename, ',') WITHIN GROUP (
  3  ORDER BY empno) NAME
  4  FROM emp
  5  GROUP BY deptno;

        ID NAME
---------- ------------------------------------
        10 CLARK,KING,MILLER
        20 SMITH,JONES,SCOTT,ADAMS,FORD
        30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES

SQL>

但是请记住,
LISTAGG
的SQL限制为4000个字符/字节。如果字符串聚合超过4000个字符,您将收到
ORA-01489:字符串连接的结果太长
。您可以使用XMLAGG作为替代方案。请参见如何存储
ip
?它已经用逗号分隔了吗?如果没有,请给出表格的结构。如果您的DBA不允许您运行
select*from
query,那么您希望如何运行我们提供的查询。
SQL> SELECT deptno id,
  2    listagg(ename, ',') WITHIN GROUP (
  3  ORDER BY empno) NAME
  4  FROM emp
  5  GROUP BY deptno;

        ID NAME
---------- ------------------------------------
        10 CLARK,KING,MILLER
        20 SMITH,JONES,SCOTT,ADAMS,FORD
        30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES

SQL>