Converter Resultados de Linhas em Colunas

04/07/2018

0

Olá, bom dia!

Estou com a seguinte consulta:

SELECT DISTINCT
P.CD_PRESTADOR AS COD_PREST,
P.NM_PRESTADOR AS NOME,
P.CD_FORNECEDOR AS COD_FORN,
F.NM_FORNECEDOR AS NOME_FORNECEDOR,
F.NM_FANTASIA AS FANTASIA,
P.DS_EMAIL AS EMAIL,
(C.NR_DDD_CELULAR ||'' ''|| C.DS_TIP_COMUN_PREST) AS CONTATO
FROM
PRESTADOR P JOIN FORNECEDOR F ON P.CD_FORNECEDOR = F.CD_FORNECEDOR JOIN PRESTADOR_TIP_COMUN C ON C.CD_PRESTADOR = P.CD_PRESTADOR
WHERE
P.TP_SITUACAO = ''A''
AND F.SN_ATIVO = ''S''
AND P.CD_TIP_PRESTA IN (8, 38, 87, 60)
ORDER BY 2

O resultado que obtenho já é esperado, no entanto, ele repete alguns prestadores que possuem mais de um contato cadastrado. Exemplo:

COD_PREST NOME COD_FORN NOME_FORNECEDOR FANTASIA CONTATO
2844 AAAA AAAAAA AAAAAAA 369033 UUUUUU UUUUUUU LTDA XXXXXX XXXXXX XXXX 11 111111111
2844 AAAA AAAAAA AAAAAAA 369033 UUUUUU UUUUUUU LTDA XXXXXX XXXXXX XXXX 11 222222222
2844 AAAA AAAAAA AAAAAAA 369033 UUUUUU UUUUUUU LTDA XXXXXX XXXXXX XXXX 11 333333333

Existe alguma forma de fazer um agrupamento pelo fornecedor, exibindo os telefones em colunas? Algo como:

2844 AAAA AAAAAA AAAAAAA 369033 UUUUUU UUUUUUU LTDA XXXXXX XXXXXX XXXX 11 111111111 11 222222222 11 333333333

Fiz algumas pesquisas e encontrei a função PIVOT, mas não consegui aplicá-la nesse contexto. Podem me ajudar?

Desde já, obrigada!
Jéssica Soares

Jéssica Soares

Responder

Post mais votado

04/07/2018

Talvez seja melhor utilizar a função ListAgg(), para agregar os valores numa lista. Será gerada uma única coluna com os dados agrupados.
Veja se o script abaixo funciona (não tenho oracle instalado no momento). De qualquer forma, acho que vale a pena dar uma olhada na função ListAgg().

SELECT
  P.CD_PRESTADOR AS COD_PREST,
  P.NM_PRESTADOR AS NOME,
  P.CD_FORNECEDOR AS COD_FORN,
  F.NM_FORNECEDOR AS NOME_FORNECEDOR,
  F.NM_FANTASIA AS FANTASIA,
  P.DS_EMAIL AS EMAIL,
  LISTAGG((C.NR_DDD_CELULAR ||' '|| C.DS_TIP_COMUN_PREST), ',') WITHIN GROUP (ORDER BY (C.NR_DDD_CELULAR ||' '|| C.DS_TIP_COMUN_PREST)) CONTATOS
FROM
  PRESTADOR P
JOIN
  FORNECEDOR F ON F.CD_FORNECEDOR = P.CD_FORNECEDOR
JOIN
  PRESTADOR_TIP_COMUN C ON C.CD_PRESTADOR = P.CD_PRESTADOR
WHERE
  P.TP_SITUACAO = 'A'
  AND F.SN_ATIVO = 'S'
  AND P.CD_TIP_PRESTA IN (8, 38, 87, 60)
GROUP BY 
  P.CD_PRESTADOR,
  P.NM_PRESTADOR,
  P.CD_FORNECEDOR,
  F.NM_FORNECEDOR,
  F.NM_FANTASIA,
  P.DS_EMAIL
ORDER BY
  P.CD_PRESTADOR,
  P.NM_PRESTADOR

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

04/07/2018

Jéssica Soares

Deu muito certo, Emerson!! Obrigada!!!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar