【问题标题】:Concatenate strings from multiple records in Teradata SQL连接 Teradata SQL 中多条记录的字符串
【发布时间】:2017-12-31 13:18:54
【问题描述】:

我有一份在不同州开展业务的商家列表。

Merch    State

A          NC

A          FL

B          CA

B          VA

我想按 Merch 分组而不是返回四个记录,而是连接状态字符串,以便输出看起来像

Merch      States

A           NC,FL

B           CA,VA

对于我的问题,我在翻译此答案中的回复时遇到了很多麻烦 Optimal way to concatenate/aggregate strings

我也无法让 String_agg 工作,我不确定它是否适用于 Teradata。 https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql

【问题讨论】:

标签: sql string teradata aggregation


【解决方案1】:

您可以使用 Teradata 中的 xml_agg() 内置函数。这不能很好地从 SQL Server 翻译,这就是为什么您在这两个链接上遇到问题的原因。

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

【讨论】:

  • 非常感谢您的回答。这似乎是一个很好的开始。我拉到前 200 名,在 Teradata Answerset 中显示“XMLAGG((Merch_state001.xml 等等。这些已保存到我计算机上的文件中,如果我在记事本中打开它们,这是正确的字符串。我不太明白这些 XML 文件是什么但可以从中提取文本?
  • 与其说是 XML,不如说是 XML。我们只是在这里借用xml_agg 函数来生成一个逗号分隔的列表,它只是一个字符串。如果它给你奇怪的输出,你可以像CAST(XMLAGG(States || ',' ORDER BY States) AS VARCHAR(500))那样在xmlagg周围扔一个CAST(),所以你肯定在输出中处理varchar字段类型。
  • 转换 XMLAGG 的语法有点古怪,至少对我来说是这样。这对我有用:TRIM(TRAILING ',' FROM (XMLAGG(state || ',' ORDER BY state ) (VARCHAR(10000)))).
  • 'select top 20 merch, translate(xmlagg(merch_state || ',' ORDER BY merch_state) as VARCHAR(500)) from table1 group by 1; ' 为我抛出这个错误info.teradata.com/HTMLPubs/DB_TTU_14_10/index.html#page/… 有什么想法吗?非常感谢,对不起,我不知道如何格式化。
  • 我已经用@Andrew 的建议更新了答案,我相信应该可以解决问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 2010-09-23
  • 2011-06-04
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多