• 【Teradata SQL】多行转一列函数TDStats.udfConcat


    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('1','管理员','1'); insert into udfconcat_test values('1','编辑','2'); insert into udfconcat_test values('1','超级管理员','3'); insert into udfconcat_test values('2','普通会员','4'); insert into udfconcat_test values('3','高级会员','5'); insert into udfconcat_test values('4',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.多行多列间转换

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

  • 相关阅读:
    MySQLCluster架构图文详解
    Request.ServerVariables大全,写到这里方便查找
    如何修改表的标识列
    如何在存储过程中,调用另一存储过程的结果集
    自我简介
    第二个web网页
    第一个网页感想
    C语言I博客作业03
    ES基本搜索(1)
    ES的入门学习
  • 原文地址:https://www.cnblogs.com/badboy200800/p/10770326.html
Copyright © 2020-2023  润新知