微笑【の】鱼 2023-04-19 20:41 采纳率: 16.7%
浏览 84
已结题

sql语句合并重复数据 将指定字段值用逗号分割

sqlserver如何将此条sql查询结果合并成一条 将三条数据的manifestId字段用逗号分割 sqlserver版本为2012

SELECT
    t.*FROM((
    SELECT
    d.AwbPrefix,d.AwbNo ,d.AwbPostfix,NULL hwbNo,d.Manifest_ID manifestId,
        b.Routing,b.AgentCode,b.Goods goodsName,h.HsCode,h.HsNameCN,h.HsNameEN,h.Piece,h.Weight,h.PackageName,
    h.DeclaredValueForCustoms,h.CurrencyName,h.IsAgree,h.DataSource,
    ISNULL(l.AgentCode, NULL) as white,h.HouseId
    FROM
    TBL_DepManifest d with(nolock)
    LEFT JOIN TBL_AWB_BASIC b with(nolock) ON d.AwbNo = b.AwbNo
    LEFT JOIN Tbl_Awb_HsDeclare h with(nolock) ON d.AwbNo = h.AwbNo and h.HwbNo IS NULL
    left join Tbl_HsCodeWhiteListAgent l with(nolock) on b.AgentCode=l.AgentCode
    ) UNION ALL
    (
    SELECT
    d.AwbPrefix,d.AwbNo,d.AwbPostfix,ha.HwbNo hwbNo,d.Manifest_ID manifestId,b.Routing,b.AgentCode,
    b.Goods goodsName,h.HsCode,h.HsNameCN,h.HsNameEN,h.Piece, h.Weight,h.PackageName,h.DeclaredValueForCustoms,
    h.CurrencyName,h.IsAgree,h.DataSource,ISNULL(l.AgentCode, NULL) as white,h.HouseId
    FROM
    TBL_AWB_HAWB ha with(nolock)
    LEFT JOIN TBL_AWB_BASIC b with(nolock) ON ha.AwbNo = b.AwbNo
    LEFT JOIN Tbl_Awb_HsDeclare h with(nolock) ON ha.HwbNo = h.HwbNo
    LEFT JOIN TBL_DepManifest d  with(nolock) ON d.AwbPrefix=ha.AwbPrefix and d.AwbNo = ha.AwbNo
    AND d.AwbPostfix = ha.AwbPostfix
    left join Tbl_HsCodeWhiteListAgent l with(nolock) on b.AgentCode=l.AgentCode
    )
    )t
        where t.AwbNo='55907865'
                order by t.AwbNo,t.hwbNo asc
    offset #{dto.pageNum} * #{dto.pageSize} ROWS FETCH NEXT #{dto.pageSize} ROWS ONLY

查询结果

img

  • 写回答

7条回答 默认 最新

  • 「已注销」 2023-04-19 20:49
    关注

    引用new bing部分指引作答:
    要将查询结果中的manifestId字段合并成一条,可以使用SQL Server中的STUFF和FOR XML PATH函数。具体步骤如下:

    1 在SELECT语句中,将manifestId字段替换为以下内容:

    STUFF((SELECT ',' + CAST(manifestId AS VARCHAR(100))
    FROM TBL_DepManifest d2 with(nolock)
    WHERE d2.AwbNo = d.AwbNo
    AND d2.Manifest_ID = d.Manifest_ID
    FOR XML PATH('')), 1, 1, '') AS manifestId
    
    

    这个子查询会将相同AwbNo和Manifest_ID的记录的manifestId字段用逗号连接起来,作为一个新的manifestId字段返回。

    2 将整个SELECT语句包裹在一个外部SELECT语句中,使用DISTINCT关键字去重,例如:

    SELECT DISTINCT t.AwbPrefix, t.AwbNo, t.AwbPostfix, t.hwbNo,
    STUFF((SELECT ',' + CAST(manifestId AS VARCHAR(100))
    FROM TBL_DepManifest d2 with(nolock)
    WHERE d2.AwbNo = d.AwbNo
    AND d2.Manifest_ID = d.Manifest_ID
    FOR XML PATH('')), 1, 1, '') AS manifestId,
    t.Routing, t.AgentCode, t.goodsName, t.HsCode,
    t.HsNameCN, t.HsNameEN, t.Piece, t.Weight, t.PackageName,
    t.DeclaredValueForCustoms, t.CurrencyName, t.IsAgree, t.DataSource,
    t.white, t.HouseId
    FROM (
    -- 原始查询语句
    ) t
    WHERE t.AwbNo='55907865'
    ORDER BY t.AwbNo, t.hwbNo ASC
    OFFSET #{dto.pageNum} * #{dto.pageSize} ROWS FETCH NEXT #{dto.pageSize} ROWS ONLY
    
    

    这个外部SELECT语句会保留每个不同的AwbNo和manifestId组合的唯一记录,并将它们的manifestId字段用逗号连接起来。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(6条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月24日
  • 已采纳回答 4月24日
  • 创建了问题 4月19日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程