1.函数定义

TDstats.udfConcat为Teradata自带UDF,定义如下:

show function tdstats.udfconcat;

REPLACE FUNCTION tdstats.UDFCONCAT
(aVarchar VARCHAR(128) CHARACTER SET UNICODE)
RETURNS VARCHAR(10000) CHARACTER SET UNICODE
CLASS AGGREGATE (20000)
SPECIFIC udfConcat
LANGUAGE C
NO SQL
NO EXTERNAL DATA
PARAMETER STYLE SQL
NOT DETERMINISTIC
CALLED ON NULL INPUT
EXTERNAL NAME 'SL!staudf!F!udf_concatvarchar'

2.功能与使用

(1)函数功能:将多行转换为一行,以逗号分隔。

(2)用户赋权

grant exec function on TDstats.udfconcat to  XXXX;

(3)使用方法:

#数据准备
CREATE MULTISET TABLE udfconcat_test
(
userid varchar(100) CHARACTER SET LATIN NOT CASESPECIFIC,
role_name VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC ,
role_id VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC
)
no PRIMARY INDEX;
insert into udfconcat_test values('','管理员','');
insert into udfconcat_test values('','编辑','');
insert into udfconcat_test values('','超级管理员','');
insert into udfconcat_test values('','普通会员','');
insert into udfconcat_test values('','高级会员','');
insert into udfconcat_test values('',null,null);
#函数调用
sel userid, cast(tdStats.udfconcat(role_name) as varchar(500)) from udfconcat_test group by 1 order by 1;
#最终结果
1 "管理员","编辑","超级管理员"
2 "普通会员"
3 "高级会员"
4

(4)注意事项:

数据量太大时存在spool不足的风险,执行效率也非常低。

此外注意返回值为VARCHAR(10000),返回结果需要根据实际结果值长度使用cast缩短返回结果的长度。

3.多行多列间转换

行转列、列转行的简单实现

【Teradata SQL】行转列函数TDStats.udfConcat的更多相关文章

  1. 使用SQL行转列函数pivot遇到的问题

    背景:对投票的结果按照单位进行汇总统计,数据库中表记录的各个账号对各个选项的投票记录.马上想到一个解决方案,先根据单位和选项进行Group By,然后再行转列得出单位对各个选项的投票情况. with ...

  2. SQL 行转列和列转行

    SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...

  3. Ms sql行转列。汇总

    SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...

  4. sql 行转列总结

    原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  5. SQL行转列,列转行

    SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...

  6. sql 行专列 列转行 普通行列转换

    转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换 ...

  7. sql 行转列 PIVOT 列转行 UNPIVOT

    原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 ...

  8. SQL行转列 (及EAV模型获取数据)

    参考文章: http://www.williamsang.com/archives/1508.html 情景简介 学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列. ...

  9. oracle 行转列函数pivot和unpivot

    今天接到业务部门的一个需求,需要对同一公司的不同财务指标进行排序,需要用到oracle的行转列函数unpivot. 财务报表的表结构为: 要实现业务部门的排序筛选功能,需要首先将行数据转为列数据: 使 ...

随机推荐

  1. postgresql 使用pg_restore时显示role "root" does not exist的解决办法

    在docker里恢复bakcup格式的数据库,结果提示role "root" does not exist 解决方法: 切换用户: su - postgres 然后再次运行命令: ...

  2. 【Teradata TTU】Windows TTU安装工具列表

    Version Display Name-------------------------------------------------------------------------------- ...

  3. MySQL中的自适应哈希索引

    众所周知,InnoDB使用的索引结构是B+树,但其实它还支持另一种索引:自适应哈希索引. 哈希表是数组+链表的形式.通过哈希函数计算每个节点数据中键所对应的哈希桶位置,如果出现哈希冲突,就使用拉链法来 ...

  4. SUSE12SP3-Mycat(4)rule.xml配置详解

    简介 rule.xml 里面就定义了我们对表进行拆分所涉及到的规则定义.我们可以灵活的对表使用不同的分片算法, 或者对表使用相同的算法但具体的参数不同.这个文件里面主要有 tableRule 和 fu ...

  5. webpack打包The 'mode' option has not been set,错误提示

    学习到webpack打包这个工具的时候,总是报错.在这里记录一下...... 我是window系统 当使用npm安装好webpack后,你去查看如果出现一下问题. 出现以上问题,我的做法是 先将web ...

  6. Jason Wang:记录自己所想所得(第一次作业)

    这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 我在这个课程的目标是 学会现代软件工程的思想,运用到实际中去 这个作业在哪个具体方面帮助我实现目标 ...

  7. [翻译]Java排错指南 - 5 确定崩溃何地发生

    原文地址: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/crashes001.html 这几天公司其他组遇到 ...

  8. okhttputils【 Android 一个改善的okHttp封装库】使用(一)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文使用的OKHttp封装库是张鸿洋(鸿神)写的,因为在项目中一直使用这个库,所以对于一些常用的请求方式都验证过,所以特此整理下. ...

  9. .NET Core 控制台应用程序使用异步(Async)Main方法

    C# 7.1 及以上的版本允许我们使用异步的Main方法. 一.新建一个控制台应用程序 二.异步Main方法 我们直接将Main方法改为如下: static async Task Main(strin ...

  10. springboot~rabbitmq自己通过UI手动发布队列需要注意的地方

    springboot里发布队列消息 为了兼容性和可读性更好,我们一般使用json字符串做为数据载体. public void decreaseCallMonitor(CallMonitorInfo c ...