2010-11-30 3 views
2

Я пытаюсь получить строку с конкатенацией имен сварщиков. Это то, что я получил:Использование XML PATH в хранимой процедуре Sql

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 

я могу получить информацию, что я хочу, но с небольшой проблемой. То, что я хочу, это «Джон Смит, Дэвид Роджерс, Питер Саймонс» и т. Д., Другими словами, полные имена, разделенные запятыми. Но я получаю «Джон, кузнец, Дэвид, Роджерс, Питер, Саймонс».

Любая помощь оценена.

Заранее спасибо.

ответ

3

Ваш REPLACE заменит все пробелы с запятой. Вместо этого сделайте запятую часть вашего запроса и используйте STUFF, чтобы удалить первое вхождение запятой. Вы также можете включить использование COALESCE в случае, если любое из полей имени NULL.

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

Вы можете добавить запятую во внутреннем выбрать и только удалить последняя запятая во внешнем выборе. –

Смежные вопросы