Preciso transformar colunas de uma tabela em linhas, onde alguns valores aparecem duplicados. Porém não consegui achar uma forma de fazer isso usando PIVOT e/ou SQL Dinâmico. Tenho a primeira tabela, preciso deixar como a segunda, conforme abaixo.
Qual banco de dados? Se for Oracle:
http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html
O que ele precisa parece ser mais LISTAGG e não PIVOT…
LISTAGG junta dentro de uma mesma coluna. Apesar do cabeçalho “Usuário” na planilha estar agrupado, os valores estão em colunas separadas.
A LISTAGG até deu certo mas utilizei outro campo, o exemplo que mandei, deu erro: o resultado da concatenação de string é extenso demais.
ListAgg fica gambiarra nesse caso que mostrou da planilha.
Mostra aqui esse SQL que você tentou e erro.
Na verdade a “gambiarra” até me atenderia, para o que preciso.
select distinct a.nr_atendimento,
a.dt_conta_definitiva,
a.vl_conta,
listagg(b.nm_usuario, ‘,’)
within group (order by 1) usuario
FROM conta_paciente a
INNER JOIN material_atend_paciente b
on a.nr_atendimento = b.nr_atendimento
where a.dt_conta_definitiva BETWEEN ‘25/11/2016’ and '03/12/2016’
group by a.nr_atendimento, a.dt_conta_definitiva, a.vl_conta
order by dt_conta_definitiva;
Se a gambiarra está atendendo, então pode usar mesmo.