优化 SQL Azure 中的字符串聚合
将多行中的字符串有效地组合成一行是一项频繁的数据操作任务。 虽然某些聚合方法被证明是不够的,但存在克服这一挑战的最佳解决方案。
SQL Azure 的最佳方法
SQL Azure 缺乏 CLR 定义的聚合函数,因此需要替代策略。 以下 Transact-SQL 方法提供了有效的解决方案:
<code class="language-sql">WITH Partitioned AS ( SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber, COUNT(*) OVER (PARTITION BY ID) AS NameCount FROM dbo.SourceTable ), Concatenated AS ( SELECT ID, CAST(Name AS nvarchar(max)) AS FullName, Name, NameNumber, NameCount FROM Partitioned WHERE NameNumber = 1 UNION ALL SELECT P.ID, CAST(C.FullName + ', ' + P.Name AS nvarchar(max)), P.Name, P.NameNumber, P.NameCount FROM Partitioned AS P INNER JOIN Concatenated AS C ON P.ID = C.ID AND P.NameNumber = C.NameNumber + 1 ) SELECT ID, FullName FROM Concatenated WHERE NameNumber = NameCount;</code>
详细说明:
该解决方案采用三部分流程:
ID
分区中的每一行分配一个唯一的编号,使用 Name
.ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name)
按 Name
值。NameNumber
最高的行,为每个 ID
生成一个串联字符串。注意:此查询假设按 ID
分组并按字符串字母升序排列。根据您的具体数据结构和要求,可能需要进行调整。 nvarchar(max)
强制转换可确保为大型串联结果提供足够的字符串长度。
以上是如何在 SQL Azure 中高效地连接多行字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!