连接Teradata SQL中多个记录的字符串

连接Teradata SQL中多个记录的字符串,sql,string,teradata,aggregation,Sql,String,Teradata,Aggregation,我有一份在不同州做生意的商人名单 Merch State A NC A FL B CA B VA 我不想返回四条记录,而是想按Merch进行分组,而是将状态字符串连接起来,这样输出看起来像 Merch States A NC,FL B CA,VA 我在翻译这个问题的答案时遇到了很多麻烦 我也不能让String_agg工作,我不确定它在Teradata中

我有一份在不同州做生意的商人名单

Merch    State

A          NC

A          FL

B          CA

B          VA
我不想返回四条记录,而是想按Merch进行分组,而是将状态字符串连接起来,这样输出看起来像

Merch      States

A           NC,FL

B           CA,VA
我在翻译这个问题的答案时遇到了很多麻烦


我也不能让String_agg工作,我不确定它在Teradata中是否工作

您可以使用Teradata中的
xml\u agg()
内置函数。这不能很好地从SQL Server进行转换,这就是为什么这两个链接存在问题的原因

SELECT merch, TRIM(TRAILING ',' FROM (XMLAGG(States || ',' ORDER BY States) (VARCHAR(500))))
FROM yourtable
GROUP BY 1;

这可能会有帮助:非常感谢你的回答。这似乎是一个很好的开始。我排在前200名,在Teradata回答集中显示“XMLAGG”((Merch_state001.xml等等。这些文件被保存到我计算机上的文件中,如果我在记事本中打开它们,这些文件就是正确的字符串。我不太明白这些xml文件是什么,但可以从中提取文本?与其说是xml,不如说是xml。我们只是借用这里的
xml\u agg
函数来生成一个逗号分隔的列表w它只是一个字符串。如果它给了你奇怪的输出,你可以在这个xmlagg周围抛出一个CAST(),比如
CAST(xmlagg(States | |,'ORDER BY States)AS VARCHAR(500))
,所以你肯定是在处理输出中的VARCHAR字段类型。至少对我来说,转换xmlagg的语法有点怪。这对我来说很有用:
TRIM(尾随“,”FROM(XMLAGG(state | | |“,”ORDER BY state)(VARCHAR(10000)))
“选择前20名merch,翻译(XMLAGG(merch|u state | |“,”ORDER BY merch|u state)为VARCHAR(500))来自table1 group by 1;'向我抛出此错误有什么想法吗?非常感谢,抱歉我不知道如何格式化此错误。我已使用@Andrew的建议更新了答案,我相信这应该可以解决问题