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)
我找到了一种在 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)