2010-11-30 11 views
2

私は溶接機の名前を連結して行を取得しようとしています。 これは私が持っているものです:SqlストアドプロシージャでのXML PATHの使用

SELECT jsd1.JuntaSoldaduraID, 
     REPLACE(RTRIM((SELECT s1.Nombre + ' ' + s1.ApPaterno + ' ' + 
      s1.ApMaterno + '' + CAST('' AS VARCHAR(MAX)) + ' ' 
FROM JuntaSoldaduraDetalle jsd 
INNER JOIN Soldador s1 on s1.SoldadorID = jsd.SoldadorID 
WHERE (jsd1.JuntaSoldaduraID = jsd.JuntaSoldaduraID) 
      and (jsd.TecnicaSoldadorID = 2) 
FOR XML PATH (''))),' ',', ') AS NombreSoldador 
FROM JuntaSoldaduraDetalle jsd1 
INNER JOIN Soldador s 
ON s.SoldadorID = jsd1.SoldadorID 
GROUP BY jsd1.JuntaSoldaduraID 

は、私は少し問題で私が欲しい情報を得ることができますよ。 私が欲しいのは、 "John Smith、David Rogers、Peter Simons"などです。言い換えれば、完全名はコンマで区切られています。 しかし、私は "ジョン、スミス、デビッド、ロジャース、ピーター、シモンズ"を受け取っています..

助けていただきありがとうございます。

ありがとうございます。

答えて

3

あなたの置換えは、すべてのスペースをカンマで置き換えます。代わりにカンマの部分を作成し、STUFFを使用してコンマの最初の箇所を削除します。名前フィールドのいずれかがNULLの場合に備えて、COALESCEの使用を組み込むこともできます。

SELECT jsd1.JuntaSoldaduraID, 
     STUFF((SELECT ', ' + COALESCE(s1.Nombre + ' ','') 
          + COALESCE(s1.ApPaterno + ' ','') 
          + COALESCE(s1.ApMaterno,'') 
        FROM JuntaSoldaduraDetalle jsd 
         INNER JOIN Soldador s1 
          on s1.SoldadorID = jsd.SoldadorID 
        WHERE jsd1.JuntaSoldaduraID = jsd.JuntaSoldaduraID 
         and jsd.TecnicaSoldadorID = 2 
        FOR XML PATH ('')),1,2,'') AS NombreSoldador 
    FROM JuntaSoldaduraDetalle jsd1 
     INNER JOIN Soldador s 
      ON s.SoldadorID = jsd1.SoldadorID 
    GROUP BY jsd1.JuntaSoldaduraID 
+0

ちょっと、私はこれを試してみました、それは素晴らしい作品です。どうもありがとうございます! – valin077

+0

+1私のアプローチは、人間に魚の釣りを教えることです。 –

+2

@Lieven:時々、人が砂漠から来るかもしれないし、ロッドとリールが何であるかを説明するのにもう少し時間を費やさなければならない。 :-) –

0

結果のスペースをカンマとスペースに置き換えます。

クエリからREPLACEを削除した場合の結果はどうなりますか?

+0

ただ、私はREPLACEを削除することができ、それでも私は分離せずに名前を持っています:「ジョン・スミスデビッドジョーンズピーター・シモンズ」などをあなたは内側の選択にカンマを追加してのみ削除でき – valin077

+0

外側の選択の最後のコンマ。 –