【问题标题】:LISTAGG equivalent in TeradataTeradata 中的 LISTAGG 等效项
【发布时间】:2015-06-13 04:12:23
【问题描述】:

teradata 中是否有相当于 oracle 的 Listagg 功能。 使用递归是我尝试过的一个选项,但想要的不是。

谢谢 阿里特拉

【问题讨论】:

  • 使用with recursive 是我知道的唯一选择。

标签: teradata


【解决方案1】:

如果安装了 Teradata 的 XML 服务(自 14.10 起默认?)有一个名为 XMLAGG 的函数,例如

SELECT DatabaseName, TABLENAME, 
   TRIM(TRAILING ',' FROM (XMLAGG(TRIM(Columnname)|| ',' ORDER BY ColumnId) (VARCHAR(10000))))
FROM dbc.ColumnsV
WHERE databasename = 'dbc' 
  AND TABLENAME = 'ColumnsV'
GROUP BY 1,2

【讨论】:

  • 但是有一个问题。它的长度是否有任何问题,因为每当我试图将它集成到一个相对较大的表上时,它都会向我抛出错误:Failure 2513 A data row is too long.
  • 你能帮我解决上述问题吗@dnoeth
  • 尝试将其转换为更小的 VARCHAR。您是否还有其他一些具有 oReplace/oTranslate 等功能的列?也将它们投射到匹配的大小。
  • 尝试将其转换为更小的 varchar ,确切地说是 varchar(50) 。但仍然是同样的错误。任何其他出路。 @dnoeth
  • 当然。 SELECT colA , colB , colC , colD , colE , XMLAGG((colF)|| ',' ORDER BY rank_col) (VARCHAR(50)) col 从表组中按 colA , colB , colC , colD , colE ; @dnoeth
猜你喜欢
  • 1970-01-01
  • 2014-09-14
  • 2015-06-27
  • 1970-01-01
  • 2011-12-19
  • 2015-05-28
  • 2018-08-15
  • 2021-11-27
  • 2021-03-26
相关资源
最近更新 更多