`
blueskylan
  • 浏览: 98692 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自定义函数-根据相同的key合并值

    博客分类:
  • db2
SQL 
阅读更多
--删除测试表
--drop table test;
--创建测试表
create table test (fcode varchar(10),fname varchar(20));

--删除临时表
--drop table temp;
--创建临时表
create table temp(fkey varchar(10),fvalue varchar(100)); 


--删除函数
--DROP FUNCTION FUN_TEST;

--自定义函数中不能使用临时表和游标
--创建函数:将多行相同的编号合并成一行,名称用分隔符合并
CREATE FUNCTION FUN_TEST(
  PARA_SPLIT VARCHAR(1) -- 分隔符

returns table(fcode varchar(10),fname varchar(100))
language sql

modifies sql data --函数中调用存储过程需要该配置
--reads sql data 

begin atomic

--定义变量
declare num int;
declare key_ varchar(10); -- 比较的关键值
declare value_ varchar(100); -- 根据相同key的值通过分隔符合并

--初始化变量
set num = 0;
set key_ = '';
set value_ = '';

--判断是否存在TEST表,如果不存在就创建该表(测试用的表)
for tableName as SELECT NAME FROM SYSIBM.SYSTABLES WHERE CREATOR NOT IN ( 'SYSIBM ', 'SYSCAT ', 'SYSSTAT ') AND NAME = 'TEST'--表名要大些
do
  if(tableName.name != '') then
    delete from test;
insert into test(fcode, fname) values('1001', 'A1'),('1001', 'B1'),('1001', 'C1'),('1002', 'A2'),('1002', 'B2'),('1003', 'A3');
  end if;
end for;

--删除临时表的数据
for tempName as SELECT NAME FROM SYSIBM.SYSTABLES WHERE CREATOR NOT IN ( 'SYSIBM ', 'SYSCAT ', 'SYSSTAT ') AND lower(NAME) = 'temp' -- lower转换为小写
do
  if(tempName.name != '') then
    delete from temp;
  end if;
end for;

for test as select fcode, fname from test order by fcode --需要根据编号排序
do
  if num = 0 then
    set key_ = test.fcode;
set value_ = test.fname;
set num = 1;
  else --这里不是 else if
if (key_ = test.fcode) then
  set value_ = value_ || PARA_SPLIT || test.fname;
  set num = num + 1;
else
  insert into temp(fkey, fvalue) values(key_,value_);
  set value_ = test.fname;
  set key_ = test.fcode;
  set num = num + 1;
    end if;
  end if;
end for;
 
if (num > 0) then
  insert into temp(fkey, fvalue) values(key_, value_);
end if; 

--可以调用存储过程,不能返回存储过程的返回值

--函数返回值
RETURN select fkey, fvalue from temp;

end;


--调用函数
--select * from table(fun_test('-')) as t
  • 描述: 合并前的数据
  • 大小: 1.4 KB
  • 描述: 合并后的数据
  • 大小: 1.1 KB
分享到:
评论

相关推荐

    js代码-数组对象根据某个值相同合并分组

    在实践中,你可以根据具体需求对这个`groupBy`函数进行扩展,例如,添加自定义比较函数,或者支持多级分组。 总之,掌握JavaScript中处理数组的方法对于任何前端开发者都是至关重要的。通过合理地运用`reduce()`,...

    SQL学习教程-约束,索引,视图,函数

    5. **自定义函数**:用户可以根据需求创建自己的函数,增强SQL的功能。 在SQL Server 2008中,这些概念得到了广泛支持和优化,提供了高效、安全的数据管理和分析环境。通过熟练掌握这些知识点,你将能够更好地设计...

    deep-merge:具有自定义合并逻辑的深度合并对象

    创建合并“策略”时,您可以配置两个值在具有相同键时应如何合并。 例如,您可能希望将它们组合成一个数组。 var DeepMerge = require ( "deep-merge" ) var assert = require ( "assert" ) var merge = DeepMerge...

    MySQL通过自定义函数实现递归查询父级ID或者子级ID

    当数据的层级关系无法预知或者可能无限深时,传统的JOIN操作可能无法满足需求,此时就需要自定义函数来实现递归查询。本文将详细介绍如何通过MySQL的自定义函数来查询父级ID和子级ID。 首先,我们需要创建一个示例...

    PHP自定义函数实现数组比较功能示例

    为了满足这一需求,可以编写自定义函数来实现数组比较的功能。本文提供的示例就是用PHP语言编写的自定义函数,用于比较两个数组的内容。 首先,函数 `standard_array_compare` 接受两个参数 `$op1` 和 `$op2`,它们...

    Excel-VBA宏编程实例源代码-排序与查询-按公司名称合并订单.zip

    这个“Excel-VBA宏编程实例源代码-排序与查询-按公司名称合并订单.zip”文件提供了关于如何使用VBA进行数据排序和查询,以及如何根据公司名称合并订单的示例代码。以下将详细介绍相关的知识点。 首先,了解VBA的...

    php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】

    `array_merge_recursive` 函数则是递归合并,当遇到相同键名时,会将值变为数组。 4. **数组计算**: `array_count_values` 函数统计数组中每个值出现的次数。例如,`array_count_values($input_array)` 返回一个...

    php数组函数分类

    - **uasort()**: 使用用户自定义的比较函数对值进行排序。 - **shuffle()**: 打乱数组中的元素顺序。 - **array_reverse()**: 反转数组中的元素顺序。 - **array_multisort()**: 同时对多个数组进行排序。 #### ...

    php数组合并 array_merge-php函数_.docx

    其中,`operate_type` 是操作的类型,可以是自定义函数,也可以是 NULL。如果是 NULL,则将后面的数组合并,分别取后面数组的每个元素作为新数组的一个元素。 例如: `function square($a) { return $a * $a; }` `...

    484个PHP必备的函数集

    - **功能**:计算两个或多个数组的差集,并保留键名,通过自定义函数比较键名和值。 - **示例**:`function compare($a, $b) { return strcmp($a, $b); } $diff = array_diff_uassoc($arr1, $arr2, "compare");` ...

    php中有关合并某一字段键值相同的数组合并的改进

    传统的数组合并,如使用`array_merge`函数,只能简单地合并两个或多个数组,而无法根据特定字段进行智能合并。然而,当我们需要合并的数组元素具有共享的键值时,我们需要一种更高级的方法来处理这种情况。描述中...

    php数组合并 array_merge-php函数__1.docx

    如果输入的数组中有相同的键,`array_merge`会优先保留数值索引的数组元素,对于关联数组,它会保留最后一个数组中的值。 例如: ```php $array1 = array('a' => 1, 'b' => 2); $array2 = array('b' => 3, 'c' => 4...

    snmp的Table和Scalar的合并程序

    `: 获取keyTable表的第一个数据点的函数。 - `Netsnmp_Next_Data_Point keyTable_get_next_data_point;`: 获取keyTable表的下一个数据点的函数。 - **列号定义**: - `#define COLUMN_USERINDEX 1` - `#define ...

    Python3 中作为一等对象的函数解析

    实例代码中提到的factorial函数是一个自定义函数,它的定义使用了Python的函数定义语法。随后,factorial函数被赋值给变量fact,体现了函数作为一等对象的特性。接着,fact作为参数传递给了map函数,map函数将fact...

    PHP数组函数讲解.docx

    - `array_diff_uassoc()`和`array_udiff_uassoc()`进一步扩展,分别在键和值比较时使用自定义函数。 5. **数组填充**: - `array_fill()`用于创建一个数组,所有元素都有相同的值。 - `array_fill_keys()`根据...

    python两个_多个字典合并相加的实例代码

    当需要合并多个字典且存在相同的键时,可以通过自定义函数来实现键值的累加。下面的sum_dict函数可以实现两个字典合并时键值的累加: ```python def sum_dict(a, b): temp = dict() for key in a.keys() | b.keys...

    php函数iris整理

    - **`array_walk()`**: 使用用户自定义函数遍历数组。 - **`arsort()`**: 对数组进行逆向排序并保持键名关联。 - **`asort()`**: 对数组进行排序并保持键名关联。 - **`sort()`**: 对数组进行排序。 - **`natsort()`...

    oracle手册

    - MERGE:根据条件合并源表和目标表的数据。 #### 8. 事务控制语句 - COMMIT:提交事务。 - ROLLBACK:回滚事务。 #### 9. DDL语句 - CREATE:创建数据库对象如表、视图等。 - DROP:删除数据库对象。 - ALTER:...

    php常用函数大收集

    - `explode()`/`implode()`:根据分隔符拆分/合并字符串。 这份700行代码的"php_fun.php"文件,很可能是对这些函数的示例演示或者集成了一个方便开发者快速查询和使用的工具。通过学习和理解这些函数,可以提升PHP...

Global site tag (gtag.js) - Google Analytics