Sybase ASE 15 字符串聚合函数

Sybase ASE 15 Aggregate Function for strings

我找到了一种在 sybase ASE 15 中将来自不同行的字符串聚合到单个行中的方法。像这样:

id | Name                    Result: id | Names
-- - ----                            -- - -----
1  | Matt                            1  | Matt, Rocks
1  | Rocks                           2  | Stylus
2  | Stylus

类似于 FOR XML PATH in T-SQL.

谢谢!

Sybase ASE 没有像list()group_concat() 这样的任何字符串聚合函数;虽然对 FOR XML 有一些支持,但不包括对 PATH option/feature.

的支持

假设您可以追加 unknown/variable 行,您唯一的 (ASE 15) T-SQL 选项将是基于游标的解决方案。

如果您发现自己在使用 ASE 16,您可以编写用户定义函数 (UDF) 来完成任务,例如:emulate group_concat() in ASE 16

你可以试试这个:

select id,list(Names,',' order by id) from TableName a group by id 

写下查询:- select id, cursorfunc(id) 来自 table

然后在上面的查询中使用下面的游标

声明 ListCurs 游标

//查询取名字 select 来自 table 的名称,其中 id=@id

打开 ListCurs SELECT@状态=0 当@Status = 0 开始 FETCH ListCurs INTO @name

IF @Status = 0 
BEGIN
   SELECT  @res = CASE WHEN @res IS NULL THEN '' ELSE @res + '& ' END + @name
END

结束 关闭 ListCurs RETURN (@res)