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

如何对STRING_AGG函数返回的OfferDetails列执行DISTINCT去重

STRING_AGG生成列去重解决方案

SQL Server的STRING_AGG函数原生不支持直接拼接DISTINCT去重参数,你可以先对聚合的源数据做去重处理,再执行聚合操作,修改后的代码如下:

OUTER APPLY
(
    SELECT 
        STRING_AGG(CAST(OfferId AS NVARCHAR(MAX)), ';') AS OfferDetails, 
        STRING_AGG(CAST(ConferenceId AS NVARCHAR(MAX)), ';') AS CustomTransferDetails
    FROM (
        -- 先筛选去重得到唯一的OfferId、ConferenceId组合,避免聚合后出现重复值
        SELECT DISTINCT co.OfferId, ct.ConferenceId
        FROM ConferenceTransfer ct
        INNER JOIN ConferenceOffer co ON ct.ConferenceId = co.ConferenceId
        WHERE
            ct.ConferenceTransferTypeId = 1 AND
            ct.DateStarted IS NOT NULL AND
            ct.CallerUserId = @agentId AND
            ct.DateInitiated BETWEEN @dateFrom AND @dateTo
    ) AS DistinctTemp
) CallTransfered

如果需要对聚合后的结果排序,可以在STRING_AGG函数后追加WITHIN GROUP排序语句,示例:

STRING_AGG(CAST(OfferId AS NVARCHAR(MAX)), ';') WITHIN GROUP (ORDER BY OfferId ASC) AS OfferDetails

如果你需要对两个聚合字段做独立去重,分别针对每个字段单独写子查询做去重处理即可。

内容的提问来源于stack exchange,提问作者Jose Ayala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:24:02