首页 > 解决方案 > 查询返回 N 个随机连接的记录

问题描述

我接到了一项任务,我需要从一个表中返回所有公司的列表,并使用 Microsoft SQL Server 从另一个表中返回与该公司关联的 3 个随机电子邮件地址的逗号分隔列。到目前为止,我已经能够以随机顺序获取公司和所有关联的电子邮件地址,但我现在需要将此列表限制为 3 个。每个公司至少有 4 个关联的电子邮件地址,但可以想象有数百个。这是我的SQL。

SELECT c.ID, c.companyName, 
STRING_AGG(e.emailAddress, ', ') WITHIN GROUP (ORDER BY NEWID()) AS eMailAddress
FROM companies c
INNER JOIN email e ON e.companyID = c.ID
GROUP BY c.ID, c.companyName

我很感激对此的任何想法。

标签: sqlsql-servertsqlrandomstring-agg

解决方案


只有CROSS APPLY3 个电子邮件地址:

SELECT c.ID, c.companyName, 
STRING_AGG(e.emailAddress, ', ') AS eMailAddress
FROM companies c
CROSS APPLY (
    SELECT TOP 3 *
    FROM email e
    WHERE e.companyID = c.ID
    ORDER BY NEWID()
) e
GROUP BY c.ID, c.companyName;

推荐阅读