Realizando um UNPIVOT separando colunas com ";" com cross apply ou string_Agg.
Hello my friends!! Como estão? Espero sempre que estejam muito bem.
Hoje gostaria de dar uma dica para vocês que pode ajudar bastante. Esses dias estava trabalhando quando o head da área me manda um dúvida que surgiu em dos grupos que ele estar de SQL, a primeira pergunta que fiz, foi "Nossa, que grupo técnico de SQL é esse? Que não estou", my bad :( rs.
Bem a dúvida era como fazer um "UNPIVOT" no SQL? Bem existe o comando Pivot /Unpivot, mas hoje gostaria de mostrar formas diferentes de fazer o UNPIVOT. O cliente tinha uma tabela com as seguintes informações:
Ele queria agrupar campo "nota" e colocar o campo "Produto" em uma linha separando esses produtos com ";"
Assim:
Para fazer isso de forma bem simples, podemos usar o string_agg, uma função excelente de concatenação e agregação do SQL, mas cuidado, pois só estar disponível a partir do SQL 2017
Segue código:
---Opção 1, sql 2017 +
select nota,STRING_AGG(produto,';') as 'unpivot' from #teste
group by nota
Outra forma simples é usando cross apply com for xml path e stuff:
select nota,STUFF(d.teste,1,1,'') as 'unpivot' from #teste a
cross apply
(
select';'+ produto from #teste b
where a.nota = b.nota
for xml path('')
) d(teste)
group by nota,STUFF(d.teste,1,1,'')
segue link: https://vulgomarcio.home.blog/2019/08/05/voce-conhece-o-operador-apply/amp/
Operador STUFF: https://docs.microsoft.com/pt-br/sql/t-sql/functions/stuff-transact-sql?view=sql-server-ver15
Bem pessoal, a dica de hoje é bem simples, até a próxima :)
Comentários
Postar um comentário