查询 Return N 条随机串联记录
Query to Return N Random Concatenated Records
我接到了一项任务,我需要 return 一个公司的所有公司列表 table 和一个以逗号分隔的列,其中包含与另一家公司关联的 3 个随机电子邮件地址 table 使用 Microsoft SQL 服务器。
到目前为止,我已经能够以随机顺序获取公司和 所有 关联的电子邮件地址,但我现在需要将此列表限制为 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
如果有任何想法,我将不胜感激。
只需 CROSS APPLY
3 个电子邮件地址:
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;
我接到了一项任务,我需要 return 一个公司的所有公司列表 table 和一个以逗号分隔的列,其中包含与另一家公司关联的 3 个随机电子邮件地址 table 使用 Microsoft SQL 服务器。 到目前为止,我已经能够以随机顺序获取公司和 所有 关联的电子邮件地址,但我现在需要将此列表限制为 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
如果有任何想法,我将不胜感激。
只需 CROSS APPLY
3 个电子邮件地址:
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;