`
blueskylan
  • 浏览: 98034 次
  • 性别: 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...

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

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

    PHP数组函数讲解.docx

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

    snmp的Table和Scalar的合并程序

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

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

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

    php 常用函数php 常用函数

    - `array_key_exists()`:检查数组中是否存在指定的键。 - `array_merge()`:合并两个或更多数组。 - `array_slice()`:从数组中取出一段。 3. **数学函数** - `rand()`:生成随机整数。 - `mt_rand()`:生成...

    php函数iris整理

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

    oracle手册

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

Global site tag (gtag.js) - Google Analytics