Sybase ASE 15字符串的聚合函数

时间:2017-07-13 21:17:23

标签: sql aggregate-functions sybase sybase-ase sybase-ase15

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

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

类似于T-SQL中的FOR XML PATH。

谢谢!

3 个答案:

答案 0 :(得分:3)

Sybase ASE没有任何字符串聚合函数,如list()group_concat();虽然对FOR XML有一些支持,但它不包括对PATH选项/功能的支持。

假设您可以附加未知/可变数量的行,您唯一的(ASE 15)T-SQL选项将是基于游标的解决方案。

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

答案 1 :(得分:0)

写在下面的查询:- 从表中选择 id, cursorfunc(id)

然后在上面查询中使用的光标下方创建 DECLARE ListCurs CURSOR FOR

//查询取名字 从表中选择名称,其中 id=@id

打开列表Curs 选择 @Status = 0 当@Status = 0 开始 FETCH ListCurs INTO @name

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

结束 关闭列表Curs 返回 (@res)

答案 2 :(得分:-3)

您可以尝试以下方法:

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