¿Como borrar la ultima coma de un concatenado de un sub query en sql? utilizando XML PATH

publicado por: Anonymous

la siguiente query devuelve dos campos (DATO1 Y DEPARTAMENTO ) QUE SON VARCHAR

SELECT DATO1 ,(SELECT   DD.NombreDepartamento +  ','  FROM CIALES AS CT INNER JOIN Departamento AS DD 
    ON CT.ID_DEPARTAMENTO = DD.IdDepartamento 
    ORDER BY CT.ID DESC 
    FOR XML PATH('') )
 AS DEPARTAMENTO FROM TABLA

El problema que tengo es que el campo DEPARTAMENTO .. como verán es una subquery , y que con el “for xml path” recorro los resultados, los concateno y les pongo una coma.. como separador, pero el problema es que también agrega la coma en el ultimo registro.

por ejemplo

devuelve = a,b,c,d,e,

yo quiero = a,b,c,d,e

¿como lo hago ?

solución

Editado: La respuesta no aplica tanto después de la última edición a la pregunta. Pero voy a dejar la respuesta por si ayuda a alguien en cuanto a ajustar el tercer parámetro de stuff dependiendo de la cadena usada para separar los elementos.


Las demás respuestas, en cuanto a mover la coma al principio y usar stuff, son totalmente correctas. Solo deseo especificar que dependiendo de cuán larga es la cadena que usas para separar los elementos, debes ajustar el tercer parámetro de stuff.

Por ejemplo, en tu caso, estás estabas usando ' , ' (una coma rodeada por 3 espacios de cada lado), o sea 7 carácteres.

Siendo este el caso, necesitas que stuff remueva los 7 primeros carácteres, de modo que debes usar 7 como el tercer parámetro:

 select dato1,
        stuff((select '   ,   ' + dd.NombreDepartamento
           from ciales as ct
           join Departamento as dd
             on ct.id_departamento = dd.IdDepartamento
          where p.id = ct.id
          order by ct.id desc
          for xml path('')), 1, 7, '') as departamento
from tabla
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *