微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Teradata:将重复值转换为逗号分隔的字符串的结果

如何解决Teradata:将重复值转换为逗号分隔的字符串的结果

我有一个典型的表,其中每一行代表一个客户-产品持有人。如果客户有多个产品,则将有多个具有相同客户ID的行。我试图将其汇总起来,以使每个客户都由一行代表,所有产品代码都用一个逗号分隔的字符串连接在一起。下图说明了这一点

Aggregating rows into single comma delimited string

搜索完此内容后,我设法使用XMLAGG函数使其工作-但这仅适用于一小部分数据样本,当按比例放大时,teradata抱怨用完“假脱机空间”-所以我认为它不是很

有人知道如何有效地实现这一目标吗?

解决方法

Teradata的较新版本支持NPath,可用于此目的。您必须习惯语法,这是一个 Table运算符:-)

例如这将返回系统中每个表的列列表:

SELECT * 
FROM 
   NPath(ON(SELECT databasename,tablename,columnname,columnid 
            FROM dbc.columnsV
           ) AS dt                            -- input data
         PARTITION BY databasename,tablename -- group by columns
         ORDER BY columnid                    -- order within list
         USING
           MODE (NonOverlapping)              -- required syntax 
           Symbols (True AS F)                -- every row
           Pattern ('F*')                     -- is returned
           RESULT(First (databasename OF F) AS DatabaseName,-- group by column
                  First (tablename OF F) AS TableName,-- group by column
                  Count (* OF F) AS Cnt,Accumulate(Translate(columnname USING unicode_to_latin) OF ANY (F)) AS ListAgg
                 )
        );

应该比XMLAgg好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。