是否有Tom Kyte支持SQL Server的STRAGG功能的实现?

时间:2009-08-10 13:22:40

标签: sql-server database

STRAGG函数实现将结果作为单个列值返回。 Oracle的实现似乎非常通用,可以用于不同的表(和关系)。可以为SQL Server实现类似的行为。在Web上进行搜索似乎只返回硬编码实现而不是通用实现。我们有任何已知的Sql服务器解决方案吗?

2 个答案:

答案 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),您可以进行分组和连接,以便获得多个结果行,您可以更改分隔符,等等。以下是关于此技术的其他几个链接:

http://blogs.technet.com/wardpond/archive/2008/03/15/database-programming-the-string-concatenation-xml-trick-revisited-or-adam-is-right-but-we-can-fix-it.aspx

http://web.archive.org/web/20150328021904/http://sqlblog.com/blogs/adam_machanic/archive/2009/05/31/grouped-string-concatenation-the-winner-is.aspx

答案 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技巧的变体,我在文章中将其作为注释显示。