You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL自动生成全量分组的分号分隔邮件列表

自动批量分组生成邮件收件人列表的SQL方案

你的问题太常见了——手动调整序号范围来分批生成邮件收件人不仅麻烦,还容易漏选或者重复。我们可以通过自动按固定数量分组+组内拼接邮箱的方式彻底解决这个问题,让SQL帮你搞定所有批次的收件人列表,不用再手动统计和修改。

核心思路

  • 先给所有用户邮箱分配连续序号(和你原来的思路一致);
  • 根据序号计算每个邮箱所属的分组(每99个为一组);
  • 按分组拼接邮箱字符串,自动生成所有需要的邮件收件人列表。

方案1:SQL Server 2017及以上版本(推荐)

从SQL Server 2017开始支持STRING_AGG函数,拼接字符串非常简洁高效:

WITH EmailList AS (
    SELECT 
        ROW_NUMBER() OVER(ORDER BY Email) AS Seq,
        Email
    FROM ApplicationUser
)
SELECT
    -- 计算分组编号,每99个邮箱一组,编号从1开始
    CEILING(Seq / 99.0) AS GroupNumber,
    -- 拼接组内邮箱,用分号分隔
    STRING_AGG(Email, ';') AS RecipientList
FROM EmailList
GROUP BY CEILING(Seq / 99.0)
ORDER BY GroupNumber;

方案2:SQL Server 2016及以下版本

如果你的数据库版本不支持STRING_AGG,可以用FOR XML PATH的经典方式实现字符串拼接:

WITH EmailList AS (
    SELECT 
        ROW_NUMBER() OVER(ORDER BY Email) AS Seq,
        Email
    FROM ApplicationUser
),
GroupedEmails AS (
    SELECT
        -- 用整数除法计算分组,(Seq-1)确保第一组从0开始
        (Seq - 1) / 99 AS GroupNumber,
        Email
    FROM EmailList
)
SELECT
    GroupNumber + 1 AS GroupNumber, -- 把分组编号改成从1开始,更直观
    STUFF(
        (SELECT ';' + Email 
         FROM GroupedEmails g2 
         WHERE g2.GroupNumber = g1.GroupNumber
         FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'),
        1, 1, '' -- 去掉开头多余的分号
    ) AS RecipientList
FROM GroupedEmails g1
GROUP BY GroupNumber
ORDER BY GroupNumber;

关键细节说明

  • 分组计算:(Seq - 1) / 99或者CEILING(Seq / 99.0)都能实现每99个一组,前者分组从0开始,后者从1开始,你可以根据习惯调整;
  • 排序:ORDER BY Email保证每次分组的顺序一致,避免重复或遗漏收件人;
  • 分隔符:这里用分号;作为邮箱分隔符,你可以根据邮件系统的要求改成逗号或其他符号。

运行以上代码后,会自动输出所有分组的收件人列表,每组最多99个邮箱,完全不需要手动干预啦!

内容的提问来源于stack exchange,提问作者Rahul Misra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:48:09