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:
E desejo retornar os dados para a aplicação agurapados da seguinte forma:
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: Concactenando,Forum,Technet,STUFF,SELECT,valores,coluna,agrupar
Windows Live Tags: Concactenando,Forum,Technet,STUFF,SELECT,valores,coluna,agrupar
WordPress Tags: Concactenando,Forum,Technet,STUFF,SELECT,valores,coluna,agrupar