STRAGG函數實現將結果作爲單列值返回。 Oracle的實現看起來非常通用,可以用於不同的表(和關係)。對於SQL Server可以實現類似的行爲。在網上搜索,似乎只返回硬編碼的實現,而不是通用的。我們有任何已知的Sql服務器解決方案嗎?Tom Kyte的STRAGG函數是否支持SQL Server?
4
A
回答
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),可以進行分組和連接,以便獲得多個結果行,可以更改分隔符等等。這裏有幾個關於這項技術的其他環節:
1
Anith森做了什麼,我認爲是最全面的答案,在他的文章 http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/ 級聯排這個問題的SQL Server Transact-SQL中的值2008年7月31日。你會發現有很多不同的技術可以做到這一點,但我認爲XML技巧是最快的。在SQL Server 2005之前,我們使用了在本文中作爲註釋顯示的UPDATE技巧的變體。
相關問題
- 1. XAMPP是否支持SQL Server?
- 2. jOOQ是否支持鏈接的SQL Server?
- 3. 是否IBM WebSphere支持SQL Server 2008的
- 4. SQL Server 2014是否支持ISNOTNULL()等函數?
- 5. VS 2013 SQL Server數據工具是否支持SQL Server 2008 R2?
- 6. AppHarbor支持的SQL Server CLR函數?
- 7. log4net AdoNetAppender是否支持sql server 2008?
- 8. SQL Server 2012是否支持ProClarity?
- 9. SQL Server是否支持分片?
- 10. SQL Server 2005是否支持datetime2
- 11. Sql Server 2000是否支持SSIS事務?
- 12. SQL Server是否支持BNF表示法?
- 13. NHibernate是否支持SQL Server 2005 Express?
- 14. FluentNHibernate是否支持SQL Server Compact Edition 4.0?
- 15. SQL Server是否支持散列索引?
- 16. SQL Server Compact不支持'CreateTime'函數
- 17. Oracle是否支持EVENTDATA()函數?
- 18. SQL Server CE是否支持空間數據類型的同步?
- 19. Oracle SQL是否支持系統函數中的輸出參數?
- 20. 是否有支持`va_list`的`printk()`函數?
- 21. SQLMetal是否支持SQL-Server 2008數據類型?
- 22. Microsoft Sql Server 2012數據質量服務是否支持Oracle?
- 23. SQOOP是否支持將CLOB/BLOB數據導出到ORACLE/SQL Server
- 24. AppHarbor是否支持SQL Server數據庫項目?
- 25. 支持sql server表
- 26. Clang ++是否支持libC++支持constexpr數學函數
- 27. mysqli是否支持ms sql?
- 28. Azure SQL是否支持Kerberos?
- 29. ORMLITE是否支持SQL EXISTS?
- 30. 未來SQL Azure中是否支持SQL Server Service Broker?
可能重複的[ListSQL在SQLSERVER](http://stackoverflow.com/questions/15477743/listagg-in-sqlserver) – Veverke 2015-09-03 14:19:32