Oracle 逗号分隔:从多列数据到单列的转化(oracle逗号转列)

每当我们查询出数据时,往往希望将多列的数据变成单列的数据更加方便使用,Oracle 中可以通过使用逗号分隔的方法,从多列到单列的转换。实际上,Oracle 中使用逗号分隔转化多列到单列,有三种方式,分别是:LISTAGG() 函数、WM_CONCAT() 函数、自定义函数,下面分别对三种方式进行介绍。

首先介绍 LISTAGG() 函数,其主要用来将一列数据合并成一个以逗号分隔的字符串,该函数是 Oracle 11g 以后提供的函数。使用该函数可以很方便的将多列转换成单列,语法如下:

LISTAGG(column,',') WITHIN GROUP ( ORDER BY sort) AS new_column 
FROM table
GROUP BY 其他列;

其中,column 代表需要转换的列,’,’ 代表以逗号分隔,sort 表示排序的关键字,new_column 是新生成的那一列数据。

另外,也可以使用 WM_CONCAT() 函数,该函数也是 Oracle 11g 以后版本提供的,不同的是它可以实现分组查询以及逗号分隔两个以上列的情况,而 LISTAGG() 只能转化一列的数据。使用 WM_CONCAT() 效果如下:

SELECT WM_CONCAT(column1||'/'||column2 ORDER BY column1) 
AS new_column
FROM table
GROUP BY 其他列;

该函数在将多列以逗号分隔时,需要将多列以某种形式合并成一列,这里的将 column1 、 column2 以 ‘/’ 合并成一列,请根据实际情况添加其他内容。

最后,也可以使用某种自定义函数,由于写自定义函数比较复杂,这里就不再展开介绍了。

总而言之,Oracle 中可以使用 LISTAGG() 函数、WM_CONCAT() 函数、自定义函数来实现将多列转换成单列,并以逗号分隔,这样可以使我们在处理数据时方便得多。


数据运维技术 » Oracle 逗号分隔:从多列数据到单列的转化(oracle逗号转列)