这是一个Oracle的列转行函数:LISTAGG()
先看示例代码:
with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Shanghai' city from dual union all select 'China' nation ,'Beijing' city from dual union all select 'USA' nation ,'New York' city from dual union all select 'USA' nation ,'Bostom' city from dual union all select 'Japan' nation ,'Tokyo' city from dual ) select nation,listagg(city,',') within GROUP (order by city) from temp group by nation
这是最基础的用法:
LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)
用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。
非常方便。
同样是聚合函数,还有一个高级用法:
就是over(partition by XXX)
也就是说,在你不实用Group by语句时候,也可以使用LISTAGG函数:
with temp as( select 500 population, 'China' nation ,'Guangzhou' city from dual union all select 1500 population, 'China' nation ,'Shanghai' city from dual union all select 500 population, 'China' nation ,'Beijing' city from dual union all select 1000 population, 'USA' nation ,'New York' city from dual union all select 500 population, 'USA' nation ,'Bostom' city from dual union all select 500 population, 'Japan' nation ,'Tokyo' city from dual ) select population, nation, city, listagg(city,',') within GROUP (order by city) over (partition by nation) rank from temp
总结:LISTAGG()把它当作SUM()函数来使用就可以了。
相关推荐
然而,由于WM_CONCAT的局限性,Oracle建议使用其他替代方法,如使用LISTAGG函数(自Oracle 11g R2起提供)或者自定义聚合函数来实现类似的功能。LISTAGG函数提供了更好的控制,比如可以指定分隔符,并且是标准的SQL...
Oracle行转列 Oracle行转列是指在Oracle...Oracle行转列操作可以使用多种方法来实现,包括UNION ALL、MODEL、COLLECTION、AGGREGATE FUNCTION、LISTAGG、REGEXP_SPLIT等方法。这些方法可以满足不同的应用场景和需求。
- **字符串的列转行**:对于简单的列转行,可以使用`LISTAGG`函数,但其灵活性有限。推荐使用自定义的函数,如`to_string_limit`,它可以更灵活地控制字符串的排序、去重和长度限制。 在实际工作中,理解并熟练...
3. 列转行:Oracle 10g中,我们通常使用LISTAGG函数(在11g中引入,但在10g可以通过其他方式模拟)或者CONNECT BY语句来实现列转行。例如,如果我们有一个包含多个产品分类的列,希望将其拆分为多行,可以使用以下...
例如,使用 LISTAGG 函数可以将多个列转换成一个字符串。 4. 多行转换成字符串 多行转换成字符串是指将多行转换成一个字符串。例如,使用 LISTAGG 函数可以将多行转换成一个字符串。 5. 字符串转换成多列 字符串...
- 使用聚合函数(如 `LISTAGG`)将多行数据连接成一个字符串。 - **字符串转换成多列** - 使用 `SUBSTR` 和 `INSTR` 函数,或者 `REGEXP_SUBSTR` 函数将字符串拆分成多列。 - **字符串转换成多行** - 同样地,...
Oracle数据库提供了多种方法来实现这种转换,本篇将详细介绍如何在Oracle中进行行列转换,包括列转行、行转列以及各种复杂场景下的转换。 1. 列转行 列转行主要是将数据库表中的多列数据转换为多行数据。在Oracle...
列转行是指将数据表中的列转换为行的操作。这种转换常用于将分类数据展平,以便更好地展示数据之间的关系或进行后续的数据分析。根据给定的部分内容,我们可以通过三种不同的方法来进行列转行操作。 ##### 2.1 使用...
- 列转行:使用UNPIVOT或其他数据库函数将列数据转换为行数据。 - 将结果集反向转置为一列:将多行数据合并为单个字段。 - 抑制结果集中的重复值:使用DISTINCT关键字。 - 利用“行转列”进行计算:在转换后的...