SQL 服务器 : join and append columns

标签 sql sql-server database sql-server-2008 tsql

我有一个 SQL 问题,希望有人能帮助我或给我一些指示。非常感谢。

我有两个表:A 和 B。

  • A 有 ID 列,这是主键字段,NAME
  • B 有 DUPIDNAMEID 列,这是主键

A 和 B 之间的关系在 B 中,DUPID 包含 A.ID 的某些值,请求附加不同的 B.NAME 值到 A.NAME 以分号分隔基于连接 A.ID = B.DUPID..

可能我解释的不够清楚,举个简单的例子。

A                                  B
ID  NAME                           DUPID      NAME
1   null                            1             John
2   null                            1             John
3   null                            1             Mark
4   null                            3             Luke
5   null                            3             Luke
                                    3             Luke
                                    3             Matthew

所以最终,我需要更新表 A,并使其如下所示

A
ID      NAME
1        John;Mark
2        null
3        Luke;Matthew
4        null
5        null

最佳答案

MySQL 不同,SQL Server 没有内置函数来执行此操作。但是您仍然可以使用 CROSS APPLYFOR XML PATH('')

来模拟它
SELECT  a.ID, 
        SUBSTRING(d.NameList,1, LEN(d.NameList) - 1) Names
FROM    a
        CROSS APPLY
        (
            SELECT DISTINCT [NAME] + '; ' 
            FROM  B 
            WHERE A.ID = B.DupID 
            FOR XML PATH('')
        ) D (NameList) 

SQLFiddle Demo

关于SQL 服务器 : join and append columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624382/

相关文章:

Mysql 日期操作

sql - 计算指定条件下的转化率

ruby-on-rails - 如何构建任务 'generate_secret_token'

sql - Sybase 性能问题 : INSERT SELECT

sql - 有没有不使用主键的好情况?

sql - Oracle 中的 SP_HELPTEXT

sql - 如何从DBF文件转到SQL Server 2008?

sql - 检查后续记录的特殊约束

sql - 递归 CTE 查询循环直到满足条件

SQL Server 选择大多数列匹配的位置