从DB2中的查询创建分隔字符串

Jef*_*ock 8 sql db2 ibm-midrange

我试图从iSeries(AS/400)上的DB2中的查询结果创建一个分隔字符串.我在T-SQL中完成了这个,但是在这里找不到办法.

这是我在T-SQL中的代码.我正在寻找DB2中的equivelant.

DECLARE @a VARCHAR(1000)
SELECT @a = COALESCE(@a + ', ' + [Description], [Description])
FROM AP.Checkbooks
SELECT @a
Run Code Online (Sandbox Code Playgroud)

如果我表中的描述如下所示:

说明1
说明2
说明3

然后它会返回:

描述1,描述2,描述3

Can*_*ice 35

从本质上讲,您正在寻找相当于GROUP_CONCATDB2 中MySQL的聚合函数.根据我发现的一个线程,您可以通过执行以下XMLAGG函数来模仿此行为:

create table t1 (num int, color varchar(10));

insert into t1 values (1,'red'), (1,'black'), (2,'red'), (2,'yellow'), (2,'green');

select num,
  substr( xmlserialize( xmlagg( xmltext( concat( ', ', color ) ) ) as varchar( 1024 ) ), 3 )
  from t1
  group by num;
Run Code Online (Sandbox Code Playgroud)

这会回来

1 red,black
2 red,yellow,green
Run Code Online (Sandbox Code Playgroud)

(或者,如果我正确地阅读了东西,应该

  • +1,旁注释:如果你在Z/OS v10上运行,那么将`as varchar(1024)`改为`as clob(1024)` (3认同)
  • 我一直在寻找这个。这正是我需要的。谢谢。 (3认同)

Jef*_*ock 0

我正在尝试在 OLEDB 中执行此操作,据我了解,您不能执行此操作,因为您无法在 OLEDB 的 SQL 中执行任何花哨的操作,例如声明变量或创建表。所以我想也是没有办法的。