【问题标题】:Concatenate many rows into a single text string将多行连接成一个文本字符串
【发布时间】:2013-10-01 09:28:13
【问题描述】:

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

声明 @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,端口锁定

【问题讨论】:

  • 哪个 sql server 版本??
  • 你有没有想过这个问题?我也有类似的情况。

标签: sql sql-server tsql


【解决方案1】:

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

;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 

【讨论】:

  • 我收到此错误:为变量赋值的 SELECT 语句不得与数据检索操作结合使用
  • @DKALT 那是因为你没有复制我的整个脚本,你必须省略'p.Pato_id'
  • 是的,但是我需要 p 的几个字段
【解决方案2】:

试试这个,

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

【讨论】:

  • 这只会连接名字和姓氏,但不会连接该 Patos 的所有记录
【解决方案3】:

我想你想要这个,

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;

【讨论】:

  • 我收到此错误:为变量赋值的 SELECT 语句不得与数据检索操作结合使用。
猜你喜欢
  • 2012-02-02
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 2010-09-16
相关资源
最近更新 更多