STRAGG函数实现将结果作为单个列值返回。 Oracle的实现似乎非常通用,可以用于不同的表(和关系)。可以为SQL Server实现类似的行为。在Web上进行搜索似乎只返回硬编码实现而不是通用实现。我们有任何已知的Sql服务器解决方案吗?
答案 0 :(得分:6)
有一个很好的XML解决方案,它被广泛使用。如果你聚合的字符串没有XML无效或XML特殊的字符串,这是最简单的,这是一个例子。
SELECT *
FROM
(
SELECT x AS [data()]
FROM
(
SELECT 'something'
UNION ALL
SELECT 'something else'
UNION ALL
SELECT 'something & something'
) y (x)
FOR XML PATH('')
) z (final)
这个例子来自Tony Rogerson在http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/07/06/871.aspx
的帖子您可以做的远不止这个简单的示例所示。您可以指定聚合中项目的顺序(在派生表中放置ORDER BY),您可以进行分组和连接,以便获得多个结果行,您可以更改分隔符,等等。以下是关于此技术的其他几个链接:
答案 1 :(得分:1)
Anith Sen在他的文章中做了我认为对SQL Server这个问题最全面的回答 http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/ 在Transact-SQL中连接行值2008年7月31日。您将看到有许多不同的技术可以做到这一点,但我认为XML技巧是最快的。在SQL Server 2005之前,我们使用了UPDATE技巧的变体,我在文章中将其作为注释显示。