2

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

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

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

谢谢!

4

3 回答 3

5

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

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

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

于 2017-07-13T23:14:59.693 回答
0

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

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

//查询以获取名称 select name from table where id=@id

OPEN ListCurs SELECT @Status = 0 WHILE @Status = 0 BEGIN FETCH ListCurs INTO @name

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

END CLOSE ListCurs RETURN (@res)

于 2021-07-28T12:40:56.360 回答
-3

你可以试试这个:

select id,list(Names,',' order by id) from TableName a group by id 
于 2018-10-24T18:25:18.183 回答