2009-08-10 82 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

相關問題