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!
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
Curtir tópico
+ 0
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().
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
Responder
Mais Posts
Clique aqui para fazer login e interagir na Comunidade :)