Concactenando valores na mesma coluna

Bom dia galera, tem sido recorrente no Forum Technet threads solicitando ajuda para agrupar valores na mesma coluna e também a pedido do Thiago Alencar que queria ver outra alternativa para concatenar valores sem usar CTE onde o código fica mais enxuto.

Bom, vamos ao cenário, temos os seguintes dados na tabela:

image

E desejo retornar os dados para a aplicação agurapados da seguinte forma:

image

Vamos agrupar todos os personagens por tipo separando-os com uma “,”
Inicialmente vamos criar a variável table @Personagens que usaremos neste exemplo

DECLARE @Personagem TABLE (dsTipo varchar(20),
nmPersonagem VARCHAR(50))
 
INSERT INTO @Personagem VALUES(‘Jedi’,‘YODA’)
INSERT INTO @Personagem VALUES(‘Jedi’,‘Obi-Wan Kenobi’)
INSERT INTO @Personagem VALUES(‘Jedi’,‘Qui-Gon Jinn’)
INSERT INTO @Personagem VALUES(‘Jedi’,‘R2-D2’)
INSERT INTO @Personagem VALUES(‘Jedi’,‘C-3PO’)

A idéia é simples, vamos converter o resultado do nosso select em XML com o FOR XML e usar a função STUFF para substituir as tags XML para “,”.

SELECT a.dsTipo,
    STUFF((SELECT ‘, ‘ + b.nmPersonagem AS “text()”
          FROM @Personagem b
         WHERE a.dsTipo = b.dsTipo
          FOR XML PATH()),1,3,) AS nmPersonagem
FROM @Personagem AS a
GROUP BY a.dsTipo

Existem outras maneiras para se atingir o objetivo, no artigo de um grande amigo Thiago Alencar ele usa CTE.

 

 

Technorati Tags: ,,,,,,,
Windows Live Tags: Concactenando,Forum,Technet,STUFF,SELECT,valores,coluna,agrupar
WordPress Tags: Concactenando,Forum,Technet,STUFF,SELECT,valores,coluna,agrupar