SQL中几种用逗号隔开行转列的方法

1. WM_CONCAT

示例:

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

说明:字段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以前的,并且数据量不是很大,不考虑效率的时候,可以考虑使用第一种方法,

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

热门相关:超武穿梭   寂静王冠   天启预报   豪门闪婚:帝少的神秘冷妻   照见星星的她