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

如何合并单列多行数据?银行账户表SQL实现问题

解决重复账号客户名拼接问题

嘿,问题出在你的子查询没和外层的账号做关联!你原来的STUFF子查询没有过滤条件,所以会把全表的客户名都拼在一起返回,而不是对应每个账号的客户名。

先回顾你已经写好的重复账号查询,它已经正确找出了重复账号和重复次数:

SELECT k1.Account_number, COUNT(*) as Counter 
FROM Customers k1 
GROUP BY k1.Account_number 
HAVING COUNT(*) > 1 
ORDER BY Counter

要给每个账号加上对应的客户名称列表,只需要在STUFF的子查询里加上账号关联条件,让子查询只取当前外层行对应的账号的客户名就行。修改后的完整SQL如下:

SELECT 
    k1.Account_number, 
    COUNT(*) as Counter,
    STUFF(
        (SELECT '; ' + Customer_name 
         FROM Customers k2 
         -- 关键:关联内层表和外层表的Account_number,确保只取当前账号的客户名
         WHERE k2.Account_number = k1.Account_number  
         FOR XML PATH('')),
        1, 1, ''  -- 去掉开头多余的"; "
    ) AS Customer_Names
FROM Customers k1 
GROUP BY k1.Account_number 
HAVING COUNT(*) > 1 
ORDER BY Counter DESC;

为什么这样能行?

  • 内层的Customers k2和外层的Customers k1通过Account_number关联,每次外层遍历一个重复账号时,内层只会查询该账号对应的所有客户名称。
  • FOR XML PATH('')会把内层查询到的多个客户名拼接成一个以"; "分隔的字符串,比如张三; 李四; 王五。
  • STUFF(...,1,1,'')用来去掉字符串开头的第一个"; ",让结果更整洁。

这样执行后,你就能得到每个重复账号的账号、重复次数,以及对应的所有客户名称列表啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:40