【发布时间】:2011-11-09 05:23:50
【问题描述】:
我正在处理一个应该给我结果的查询:
|--姓名--|--姓--|--语言--|--日期-- | |詹姆斯 |赫特菲尔德 |英、英、法 | 2011-01-01| |拉斯 |乌尔里希 |英、法、加 | 2011-01-01|但我的选择会得到一组行,例如:
|詹姆斯 |赫特菲尔德 | zh | 2011-01-01| |詹姆斯 |赫特菲尔德 |国标| 2011-01-01| |詹姆斯 |赫特菲尔德 |法语 | 2011-01-01| |拉斯 |乌尔里希 |国标| 2011-01-01| |拉斯 |乌尔里希 |法语 | 2011-01-01| |拉斯 |乌尔里希 |加州 | 2011-01-01|您推荐哪种最佳方法“即时”将结果集转换为分组列中的逗号分隔值?我发现 CROSS APPLY 可以完成这项工作,但人们说这种方法非常消耗。此外,数据库拥有大量数据。
提前致谢, 问候, 阿德里安
【问题讨论】:
-
CROSS APPLY 是否需要太长时间 - 您需要多长时间才能加快速度?
-
如果每个组中的排序不重要,那么 CLR 聚合可能是最快的。如果您需要特定的订单,
FOR XML是唯一可靠的方式(只要您的数据不包含某些有问题的字符)。 -
CROSS APPLY 让我很困惑。我需要将查询速度提高 >60%
-
如果使用正确,CROSS APPLY 不会消耗。你能显示示例代码吗?此外,什么版本的 SQL Server,如这里给出的答案,将在 SQL Server 2005 和 2008 中工作,但不能在 SQL Server 2000 中工作。最后,你为什么要这样做?如果稍后在 SQL 中使用这些数据,这似乎是一个糟糕的计划,如果是为了显示,在 GUI/客户端应用程序中执行?
-
Metallica 参考文献加一
标签: sql tsql stored-procedures dynamic concatenation