2016-10-07 1 views
0

こんにちは、私は列の複数の行の値を1つの列に連結しようとしています。 FOR XML PATH( '')を使用して実現できますが、SQL Serverで連結するための代替ソリューションはありますか。複数の行の値をxmlパスなしでSQLの単一の列に連結する方法

StudentName 
------------- 
Mary 
John 
Sam 

と予想される出力は( '')私は

select Name + ', ' AS 'data()' from NAMES FOR XML PATH('') 

を達成することができ、これを使用することにより

StudentName 
------------- 
Mary, John, Sam 

ようなことが、XMLパスを使用せずにする必要がありはどんな選択肢があります。 ?

+0

しません。簡単な方法があれば、誰も 'xmlパスのために'をお勧めしません。 –

+0

@ GordonLinoff情報ありがとうございます。しかし、SQLクエリをサポートしている別のツールに問い合わせしようとしていますが、XML PATHを受け付けていません – Arshad

+0

名前はいくつありますか? –

答えて

1

あなたは再帰CTEを使用して名前を連結することができます:私は(私はXMLパス・ソリューションを好むだろう)正常に助言するものではありませ思い

with s as (
     select s.*, row_number() over (order by studentname) as seqnum 
     from students 
    ), 
    cte as (
     select studentName as names, seqnum 
     from s 
     where seqnum = 1 
     union all 
     select cte.names + ',' + s.studentName 
     from cte join 
      s 
      on s.seqnum = cte.seqnum + 1 
    ) 
select top 1 cte.names 
from cte 
order by seqnum desc; 
1

一つの解決策:

本当に
DECLARE @Result VARCHAR(MAX)=''; 
SELECT @Result = @Result + ',' + Name 
FROM NAMES; 

SELECT SUBSTRING(@Result,2,10000) 
関連する問題