1

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

我有两张桌子:A 和 B。

  • A 具有ID作为主键字段的列,并且NAME
  • B 有列,DUPID这是主键NAMEID

A 和 B 之间的关系在 B 中,DUPID包含 的某些值A.ID,请求是在 join 的基础上附加不同的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
4

1 回答 1

4

与, 不同MySQLSQL Server没有内置函数可以做到这一点。但是您仍然可以使用CROSS APPLYand来模拟它FOR 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 演示

于 2012-09-27T15:04:59.730 回答