sql - 将重复记录合并到 1 个字段中

标签 sql sql-server t-sql

我有一个包含联系人列表的数据库表,其中一些联系人可能有多个记录,例如

CustomerID, CustomerName, Vehicle
1, Dan, Mazda
1, Dan, Suzuki
2, John, Ford
3, Dasha, Volvo
3, Dasha, Ford

我可以编写一个选择查询来返回不同的 customerID 和 CustomerName,以及 1 条记录中的车辆列表吗?即

1, Dan, Mazda+Suzuki
2, John, Ford
3, Dasha, Volvo+Ford

谢谢

最佳答案

有一些nice answers to this problem on another question

根据the linked article ,由于使用了 XML 函数,这仅适用于 SQL Server 2005 及以上版本。摘自文章-

SELECT table_name, 
       LEFT(column_names,LEN(column_names) - 1)   AS column_names 
FROM   (SELECT table_name, 
               (SELECT column_name + ',' AS [text()] 
                FROM   information_schema.columns AS internal 
                WHERE  internal.table_name = table_names.table_name 
                FOR xml PATH ('') 
               ) AS column_names 
        FROM   (SELECT   table_name 
                FROM     information_schema.columns 
                GROUP BY table_name) AS table_names) AS pre_trimmed;

Second version (admittedly inspired by this post, which I stumbled on after writing the first version):

SELECT table_name, 
       LEFT(column_names,LEN(column_names) - 1)   AS column_names 
FROM   information_schema.columns AS extern 
       CROSS APPLY (SELECT column_name + ',' 
                    FROM   information_schema.columns AS intern 
                    WHERE  extern.table_name = intern.table_name 
                    FOR XML PATH('') 
                   ) pre_trimmed (column_names) 
GROUP BY table_name,column_names;

The second CROSS APPLY version is supposedly slower according to the execution plan, but I didn’t conduct any benchmarks at all.

关于sql - 将重复记录合并到 1 个字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/527533/

相关文章:

SQL Server 一天中每小时返回 4 行

mysql - 鉴于这些表格,我将如何选择所有未标记的案例?

sql - 如何将逗号分隔的字符串转换为逗号分隔的整数并将其作为 Oracle 中的参数传递?

sql - 小于 NVARCHAR(50) 上的函数,它保存数字但格式不同

sql-server - SQL Server Management Studio 2012 - 将数据库部署到 SQL Azure - SQL71501 用户对登录有未解析的引用

sql - 行为取决于 sql server 版本

sql-server - 如何在 SQL 中查找不配对的行?

sql - 在 SQL Server 中分别从给定的月、日和年获取星期几名称

sql-server - T-SQL如何向用户授予角色

SQL Server 2005 仅恢复一种架构