Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将多行串联为单个文本字符串_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 将多行串联为单个文本字符串

Sql 将多行串联为单个文本字符串,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图将多个名称连接到一个列中,但我很难做到这一点 DECLARE @Names VARCHAR(8000) SELECT p.Pato_Id @Names = 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

我试图将多个名称连接到一个列中,但我很难做到这一点

DECLARE @Names VARCHAR(8000) SELECT p.Pato_Id @Names = 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 声明@Names VARCHAR(8000) 挑选 p、 帕托伊德 @名称=合并(@Names+','','')+e.First\u Name+''+e.Last\u Name 从…起 帕托斯p 左连接 帕托沃 在…上 po.Pato_Id=p.Pato_Id 左连接 人物e 在…上 po.Owner\u Id=e.Person\u Id 如何做到这一点

编辑:

当我做一个正常的选择时,我得到

PatoID First Last 0 John Wort 0 Dan Mass 1 Till Bos 2 Wrap Sim 2 Port Lock 翼状头 0约翰麦汁 0 Dan质量 1至10月 2包Sim卡 2端口锁 我想要的是:

PatoID Names 0 John Wort, Dan Mass 1 Till Bos 2 Wrap Sim, Port Lock 翼状体名称 0约翰·沃特,丹·马塞斯 1至10月 2套Sim卡,端口锁 我想你想要这个

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;

您留下了join,这表示您可以有空名称。如果发生这种情况,这将重置名称的值

;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 
试试这个

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

哪一个sql server版本?您曾经发现过这一点吗?我也遇到了类似的情况。我得到了这样一个错误:一个SELECT语句为一个变量赋值,它不能与数据检索相结合operations@DKALT那是因为你没有复制我的整个脚本,你必须省略“p.Pato_id”是的,但是我需要pI中的几个字段,因为我得到了这个错误:为变量赋值的SELECT语句不能与数据检索操作相结合。这将只连接名字和姓氏,而不是该PATO的所有记录