Sql server 连接相应行的t-sql查询

Sql server 连接相应行的t-sql查询,sql-server,tsql,sql-server-2008-r2,Sql Server,Tsql,Sql Server 2008 R2,我有一张桌子。列:ManagerId,ManagerName 我有一张桌子。列:ClientId、ManagerId、ClientName、ClientAddress、Details 每一个?经理在客户表中有客户 我需要一个返回下一个表的查询。列:第1列,第2列 专栏1:经理姓名 第2列:ClientName1','clientaddress 1','Details1';'ClientName2','clientaddress 2','Details2';'等 在第2列中,仅列出与第1列中的ma

我有一张桌子。列:ManagerId,ManagerName

我有一张桌子。列:ClientId、ManagerId、ClientName、ClientAddress、Details

每一个?经理在客户表中有客户

我需要一个返回下一个表的查询。列:第1列,第2列

专栏1:经理姓名

第2列:ClientName1','clientaddress 1','Details1';'ClientName2','clientaddress 2','Details2';'等

在第2列中,仅列出与第1列中的manager相对应的客户机

我该怎么做


我想我需要使用COALESCE,但我不确定。

这里是一个使用XML AUTO的工作示例

输出将如下所示

ManagerName Clients
----------- -------------------------------------------------------------------------------------------------------------------------------------------
Tom         TaXon Pro, 112 Acme St Cityville DD 56, ABC;Pro Xon, 12342 Bylo Rd Streetville DD 156, CDR;Clean Svc, 6512 Toni St Townville DD 1236, D@#$;
Jane        ContraRel, 152 Acme St Villageville DD 3456, SER;RepoIn, 1 Acme St Districtville DD 1456, KH;

(2 row(s) affected)

和前面的答案相同,添加了处理空值和XML特殊字符&'

结果:

ManagerName  Clients
-----------  ---------------------------------------------------
Manager 1    Client 1, CA 1, D 1; Client 2, CA 2, D 2
Manager 2    XML special characters &<>" and null values, , D 3
SELECT 
    ManagerName,
    (
        SELECT ClientName + ', ' + ClientAddress + ', ' + Details + ' ; '
        FROM Clients c
        WHERE c.ManagerId = m.ManagerId
        FOR XML PATH ('')
    ) AS clients
FROM Managers m
declare @Managers table
(
  ManagerId int,
  ManagerName varchar(50)
)

declare @Clients table
(
  ClientId int,
  ManagerId int,
  ClientName varchar(50),
  ClientAddress varchar(50),
  Details varchar(50)
)

insert into @Managers values(1, 'Manager 1')
insert into @Managers values(2, 'Manager 2')

insert into @Clients values (1, 1, 'Client 1',   'CA 1', 'D 1')
insert into @Clients values (2, 1, 'Client 2',   'CA 2', 'D 2')
insert into @Clients values (3, 2, 'XML special characters &<>" and null values', null,  'D 3')

select M.ManagerName,
       stuff((select '; '+
                     coalesce(C.ClientName, '')+', '+
                     coalesce(C.ClientAddress, '')+', '+
                     coalesce(C.Details, '')
              from @Clients as C 
              where C.ManagerId = M.ManagerId
              for xml path(''), type).value('.', 'nvarchar(max)'), 1, 2, '') as Clients
from @Managers as M
ManagerName  Clients
-----------  ---------------------------------------------------
Manager 1    Client 1, CA 1, D 1; Client 2, CA 2, D 2
Manager 2    XML special characters &<>" and null values, , D 3