`

ORACLE 行列转换之拼成字符串

阅读更多
前段时间使用ORACLE,同事提出一个需求,要求将有相同CODE的值连接成一个字符串。这种小问题怎会难倒我,于是提出方案!
建表语句:
create table SP_ALERT_PA_GROUP
(
  ID          INTEGER not null,
  ALERTCODE   VARCHAR2(8),
  PAINNERCODE VARCHAR2(20)
)
insert into sp_alert_pa_group (ID, ALERTCODE, PAINNERCODE)
values (10081, 'AL000027', 'R0000005');
insert into sp_alert_pa_group (ID, ALERTCODE, PAINNERCODE)
values (10082, 'AL000027', 'R0000006');  
insert into sp_alert_pa_group (ID, ALERTCODE, PAINNERCODE)
values (10083, 'AL000026', 'R0000001');
insert into sp_alert_pa_group (ID, ALERTCODE, PAINNERCODE)
values (10084, 'AL000026', 'R0000002');

要求显示的结果
ALERTCODE   PAINNERCODE
AL000027  R0000005,R0000006,
AL000026  R0000001,R0000002,
1.使用自定义函数
CREATE OR REPLACE FUNCTION getpa(alertcode VARCHAR2)
RETURN VARCHAR2
IS
pastr VARCHAR2(4000);
BEGIN
FOR cur IN (SELECT painnercode FROM sp_alert_pa_group WHERE alertcode=alertcode) LOOP
pastr := pastr||cur.painnercode||',';
END LOOP;
RETURN pastr;
END;
然后使用下面的SQL查询即可!
SELECT DISTINCT alertcode ,getpa(alertcode) FROM sp_alert_pa_group f

2.使用ORACLE内置函数实现。只支持10G以上
SELECT wmsys.wm_concat(painnercode) FROM sp_alert_pa_group 

这个简单明了,但是我这里不能用,哎数据库版本的问题。太低
3.使用SQL语句迭代(sys_connect_by_path)
select substr(max(sys_connect_by_path(painnercode,',')),2) paramcode 
from (select a.*,row_number()over(order by painnercode) rn from sp_alert_pa_group a )   
  start with rn=1 
connect by rn-1=prior rn 


公司里还使用DB2,下面是DB2中使用自定义函数:
CREATE FUNCTION getpa(v_alertcode VARCHAR(8))
    RETURNS VARCHAR(4000)
    LANGUAGE SQL  
    SPECIFIC getpa  --SPECIFIC getpa 指定函数名称
    gp: BEGIN ATOMIC 
        DECLARE pastr VARCHAR(4000) DEFAULT '';
        FOR cur AS
            SELECT painnercode FROM sp_alert_pa_group WHERE alertcode=v_alertcode
        DO
            SET pastr=pastr || cur.painnercode || ',';
        END FOR;
        RETURN pastr;
    END gp;


此处,除了表名不能作为参数传递以外,列都可以用参数代替!
分享到:
评论

相关推荐

    Oracle中分组后拼接分组字符串[文].pdf

    Oracle 中分组后拼接分组字符串 在 Oracle 中,分组后拼接分组字符串是一种常见的操作,用于将分组后的多条记录的某字段进行拼接。下面我们来详细介绍如何实现这种操作。 首先,创建一个测试表 `test`,该表包含三...

    oracle通过sql实现字符串转数字oracle函数

    在Oracle数据库中,将字符串转换为数字是一项常见的操作,特别是在处理包含数字的字符串列时,可能需要进行数值计算或按照数值大小进行排序。本篇文章将深入探讨如何在SQL查询中利用Oracle提供的函数来实现这一目标...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    Oracle_Sql_中常用字符串处理函数

    Oracle Sql 中提供了多种字符串处理函数,用于对字符串进行各种操作,如大小写转换、截取、连接、查找、替换等。下面是 Oracle Sql 中常用的字符串处理函数: 1. 大小写转换函数 Oracle Sql 提供了两个大小写转换...

    oracle 如何判断一个字符串能否转换为数字?

    尤其是在处理字符型数据时,有时我们需要判断一个字符串是否能够被成功地转换成数字类型。与SQL Server提供了`IS_NUMBER`这样的内置函数不同,Oracle并没有提供一个直接的函数或方法来实现这一功能。因此,我们需要...

    读取Excel拼成字符串

    Excel 导入 oracle 实现从Excel中读取内容,按照一个格式拼成字符串

    oracle按特定字符截取字符串

    oracle,按特定字符,截取字符串,直接出结果 oracle,按特定字符,截取字符串,直接出结果oracle,按特定字符,截取字符串,直接出结果

    oracle行列转换例子

    在Oracle数据库中,行列转换是一种常见的数据操作需求,主要用于将数据从行的形式转换为列的形式,或者反之。这种转换在数据分析、报表制作等场景中尤为常见。本文将深入解析一个Oracle行列转换的例子,通过详细解释...

    Oracle 行列转换 总结

    Oracle 行列转换总结 Oracle 行列转换是指在 Oracle 数据库中将行与列之间进行转换的操作。这种转换有六种情况:列转行、行转列、多列转换成字符串、多行转换成字符串、字符串转换成多列、字符串转换成多行。 1. ...

    Oracle拆分字符串,字符串分割的函数

    在Oracle数据库中,处理字符串是常见的操作之一,尤其是在数据分析或数据清洗的过程中。有时我们需要将一个长字符串分割成多个部分,以便进行进一步的操作。Oracle提供了一些内置的函数来帮助我们完成这个任务。本篇...

    Oracle连接字符串

    Oracle 连接字符串是指连接 Oracle 数据库的字符串书写方法,本文总结了多种连接 Oracle 数据库的字符串书写方法。 一、标准连接字符串 标准连接字符串是最基本的连接字符串格式,用于连接 Oracle 数据库。例如,...

    oracle行列转换

    Oracle 行列转换技巧详解 Oracle 行列转换是指将数据库表中的行转换为列或将列转换为行的一种操作。这种操作在实际应用中非常有用,例如在数据报表生成、数据分析和数据挖掘等领域。下面我们将详细介绍 Oracle 行列...

    Oracle接收长度大于4000的字符串

    ### Oracle接收长度大于4000的字符串 在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。当需要处理更长的字符串时(例如,超过4000个字符),可以采用多种方法来解决这一问题。本文将详细...

    oracle遍历数据库查找字符串

    标题"Oracle遍历数据库查找字符串"暗示了一个实用的解决方案,它允许用户快速搜索Oracle数据库中的特定文本字符串,无需手动编写复杂的SQL查询。这通常在数据审计、故障排查或日志分析等场景中非常有用。 描述中...

    oracle多行转为字符串总结

    介绍了将多行转为字符串的三种方案,并比较了三种方案的执行效率. 1.sys_connect_by_path + start with ... connect by ... prior + 分析函数 2.自定义Function/SP 3.使用 Oracle 10g 内置函数 wmsys.wm_concat

    oracle-字符串去重函数

    传入一个字符串和该字符串的分割字符,返回去重后的字符串,可以直接在plsql中运行,简单的函数运用,能处理oracle中。资源仅供参考

    oracle中操作字符串

    ### Oracle中操作字符串 在Oracle数据库中,对字符串进行处理是一项常见的需求,特别是在处理带有特定分隔符(如逗号`,`、冒号`:`等)的字符串时。本文将详细介绍如何利用Oracle内置函数来实现从含有逗号和冒号的...

    oracle行列转换总结

    在Oracle数据库中,行列转换是一项常用且强大的功能,它允许数据在不同的维度上进行转换,以便于数据分析和报告。本文将深入探讨Oracle中实现行列转换的几种方法,包括使用`UNION ALL`、`MODEL`子句以及集合类型(`...

    Oracle查找字符串中某字符出现的次数

    select f_find('Ap@2233ll@@l@@','@') from dual 返回结果为5,代表‘@’在该字符串中出现5次。 同理 select f_find('Ap@223SWEQQQ3ll@@l@@','Q') from dual---返回3,代表Q在字符串中出现了3次, select f_find('我...

Global site tag (gtag.js) - Google Analytics