0

我正在尝试将多个名称连接到一个列中,但我无法到达那里。

声明 @Names VARCHAR(8000)

选择
    p.Pato_Id
    @Names = COALESCE(@Names + ', ', '') + e.First_Name + ' ' + e.Last_Name

从
    帕托斯

左连接
    Pato_Owners po
上
    po.Pato_Id = p.Pato_Id
左连接
    人 e
上
    po.Owner_Id = e.Person_Id

如何才能做到这一点?

编辑:

当我进行正常选择时,我得到

PatoID 第一个 最后一个
0 约翰麦汁
0 丹质量
1 直到博斯
2 包裹模拟
2 端口锁定

我想要的是:

PatoID 名称
0 约翰·麦汁,丹·马萨斯
1 直到博斯
2 Wrap Sim,端口锁定

4

3 回答 3

0

我想你想要这个,

WITH Sales_CTE (Pato_Id, First, Last)
AS
(
Select p.Pato_Id , e.First , e.Last
FROM 
    Patos p
LEFT JOIN 
    Pato_Owners po
ON
    po.Pato_Id = p.Pato_Id
LEFT JOIN 
    Person e
ON
    po.Owner_Id = e.Person_Id
)
SELECT Pato_Id,  
Substring((Select ',' + ISNULL(First,'') +  ISNULL(Last,'') From Sales_CTE B Where B.Pato_Id=A.Pato_Id For XML Path('')),2,8000) As names  
 from Sales_CTE A group by Pato_Id;
于 2013-10-01T09:33:22.807 回答
0

您已离开连接,这表明您可以拥有空名称。如果发生这种情况,这将重置名称的值。

;with cte as
(
SELECT 
    p.Pato_Id,
    coalesce(e.First_Name, '') + coalesce(' ' + e.Last_Name, '') Name
FROM 
    Patos p

LEFT JOIN 
    Pato_Owners po
ON
    po.Pato_Id = p.Pato_Id
LEFT JOIN 
    Person e
ON
    po.Owner_Id = e.Person_Id
)

select t.Pato_id
    ,STUFF(( 
        select ',' + [name] 
        from cte t1 
        where t1.Pato_Id = t.Pato_Id
        for xml path(''), type 
    ).value('.', 'varchar(max)'), 1, 1, '') [Names] 
from cte t 
group by t.Pato_id 
于 2013-10-01T09:33:34.543 回答
0

尝试这个,

DECLARE @Names VARCHAR(8000) 

SELECT 
p.Pato_Id,
'ServerName' = COALESCE(@Names + ', ', '') + e.First_Name + ' ' + e.Last_Name

FROM 
Patos p

LEFT JOIN 
Pato_Owners po
ON
po.Pato_Id = p.Pato_Id
LEFT JOIN 
Person e
ON
po.Owner_Id = e.Person_Id
于 2013-10-01T09:34:36.127 回答