2013-10-01 71 views
0

我試圖將幾個名稱連接成一個列,但我遇到了麻煩。將許多行連接成單個文本字符串

 
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 

這怎麼辦?

編輯:

當我正在做一個正常的選擇我越來越

 
PatoID First Last 
0  John Wort 
0  Dan Mass 
1  Till Bos 
2  Wrap Sim 
2  Port Lock 

而我想要的是:

 
PatoID Names 
0  John Wort, Dan Mass 
1  Till Bos 
2  Wrap Sim, Port Lock 

+0

的SQL Server版本? – Dhaval

+0

這是SQL Server 2012 –

+0

你有沒有想過這個?我有類似的情況。 – xeon

回答

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; 
+0

我得到這個錯誤:將一個值賦給一個變量的SELECT語句不能與數據檢索操作相結合。 –

+0

請檢查我的最新編輯 –

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 
+0

我得到這個錯誤:將一個值賦給一個變量的SELECT語句不能與數據檢索操作相結合 –

+0

@DKALT這是因爲你沒有複製我的整個腳本,你必須省略'p.Pato_id' –

+0

是的,但我需要p –

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 
+0

這將只連接首次和最後一個名字,但不是所有Patos –

+0

的記錄剛剛看到您的更新結果,等等 –

相關問題