首页 > 数据库 > mysql教程 > 如何在 SQL Azure 中高效地连接多行字符串?

如何在 SQL Azure 中高效地连接多行字符串?

Patricia Arquette
发布: 2025-01-20 08:56:09
原创
322 人浏览过

How Can I Efficiently Concatenate Strings from Multiple Rows in SQL Azure?

优化 SQL Azure 中的字符串聚合

将多行中的字符串有效地组合成一行是一项频繁的数据操作任务。 虽然某些聚合方法被证明是不够的,但存在克服这一挑战的最佳解决方案。

SQL Azure 的最佳方法

SQL Azure 缺乏 CLR 定义的聚合函数,因此需要替代策略。 以下 Transact-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;
登录后复制

详细说明:

该解决方案采用三部分流程:

  1. 行编号: 为每个 ID 分区中的每一行分配一个唯一的编号,使用 Name.ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name)
  2. 字母顺序排序。
  3. 递归串联: 递归公用表表达式 (CTE) 根据分配的行号迭代附加 Name 值。
  4. 最终选择: 过滤结果以仅保留每个分区中 NameNumber 最高的行,为每个 ID 生成一个串联字符串。

注意:此查询假设按 ID 分组并按字符串字母升序排列。根据您的具体数据结构和要求,可能需要进行调整。 nvarchar(max) 强制转换可确保为大型串联结果提供足够的字符串长度。

以上是如何在 SQL Azure 中高效地连接多行字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板