SQL中几种用逗号隔开行转列的方法
  dvxYZkq7zs07 2023年11月01日 132 0

1. WM_CONCAT

示例:

SELECT 字段1
      ,WM_CONCAT(字段2) 
   FROMGROUP BY 字段1

说明:字段2没有排序功能,还有就是只能使用逗号进行分割,不能使用其他自定义的分隔符进行分割

  在WM_CONCAT中可以加DISTINCT来进行去重,例如:WM_CONCAT(DISTINCT 字段2)

 

2. LISTAGG

示例:

SELECT 字段1
      ,LISTAGG(字段2, ',') WITHIN GROUP (ORDER BY 字段1, 字段2)
  FROM GROUP BY 字段1

说明:字段2可以按要求进行排序,如果不需要排序则在ORDER BY语句中将字段2去除即可,还能自定义分隔符,缺点就是拼接字符不能超过VARCHAR2的最大长度

 

3. XMLAGG

示例:

SELECT 字段1
      ,RTRIM(XMLAGG(XMLPARSE(CONTENT 字段2 || ',' WELLFORMED) ORDER BY 字段1, 字段2).GETCLOBVAL(), ',') 
FROMGROUP BY 字段1

说明:在拼接字段时可能超过VARCHAR2的最大长度时使用,拼接的字段CLOB

 

以上3种方法中:

方法1好像效率较低,12C版本中好像已经被删除掉了,

所以如果使用的版本的是12C以前的,并且数据量不是很大,不考虑效率的时候,可以考虑使用第一种方法,

如果考虑效率的话,优先选用第二种方法,如果拼接出的字符串可能会过大时请选择第三种方法

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  3ayHCrFEPsjq   2024年02月29日   107   0   0 Oracle
  XkHDHG7Y62UM   2024年05月17日   53   0   0 Oracle
  SnWF7I2y43Ze   2024年05月17日   50   0   0 Oracle
  VvmabEMLpPmm   2024年04月11日   41   0   0 Oracle
  VvmabEMLpPmm   2024年04月10日   48   0   0 Oracle
dvxYZkq7zs07