2010-11-30 2 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"등입니다. 즉, 전체 이름은 쉼표로 구분됩니다. 하지만 "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 제거 할 수 있습니다,하지만 여전히 나는 분리하지 않고 이름을 가지고 있습니다, 단지 "존 스미스 데이비드 존스 (David Jones) 피터 시몬스"등 당신은 내 선택에 쉼표를 추가 할 수 – valin077

+0

만 제거 마지막 쉼표는 외부 선택입니다. –

관련 문제