2009-08-10 81 views
4

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

+0

可能重复的[ListSQL在SQLSERVER](http://stackoverflow.com/questions/15477743/listagg-in-sqlserver) – Veverke 2015-09-03 14:19:32

回答

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) 

这个例子是从托尼·罗杰森的帖子在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://sqlblog.com/blogs/adam_machanic/archive/2009/05/31/grouped-string-concatenation-the-winner-is.aspx