Transformar colunas de uma tabela em linhas - SQL

7 respostas
oraclesql
M

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.

7 Respostas

J

Qual banco de dados? Se for Oracle:

http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html

P

O que ele precisa parece ser mais LISTAGG e não PIVOT…

J

LISTAGG junta dentro de uma mesma coluna. Apesar do cabeçalho “Usuário” na planilha estar agrupado, os valores estão em colunas separadas.

M

A LISTAGG até deu certo mas utilizei outro campo, o exemplo que mandei, deu erro: o resultado da concatenação de string é extenso demais.

J

ListAgg fica gambiarra nesse caso que mostrou da planilha.

Mostra aqui esse SQL que você tentou e erro.

M

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;
J

Se a gambiarra está atendendo, então pode usar mesmo.

Criado 30 de novembro de 2016
Ultima resposta 2 de dez. de 2016
Respostas 7
Participantes 3