Sql Oracle中列的附加值
我的表中有一列保存IP地址。我不知道该列中有多少IP,由于权限问题,我的DBA不会帮助我执行spool toSql 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
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>