none
Dúvida em relação a utilização do PIVOT RRS feed

  • Pergunta

  • Tenho uma consulta que preciso transformar as linhas em colunas.

    Exemplo:

    Linhas:


    Colunas:


    Ainda não entendi o pq das notas não estar aparecendo em cada etapa, já tentei de varias formas, até mudei o tipo do campo nota, mas não resolveu.

    Abaixo a query q estou usando com PIVOT.


    SELECT CANDIDATO_NOME,  ETAPA_1, ETAPA_2
    FROM (SELECT CANDIDATO_NOME, ST.ETA_NOME as ID_ETAPA, CET_RESULTADO_NOTA FROM VW_candidatos W                                                                                                                     
         INNER JOIN sel_oferta_encaminhamento O ON O.id_encaminhamento = W.candidato_id_encaminhamento                                                                      
         INNER JOIN sel_candidato C             ON C.id_oferta_encaminhamento = O.id_oferta_encaminhamento                                                                   
         INNER JOIN sel_oferta SO               ON SO.id_sel_oferta = O.id_sel_oferta AND SO.id_sistema = W.id_sistema                                                                                          
         INNER JOIN sel_selecao S               ON S.id_sel_oferta = SO.id_sel_oferta                                                                                        
         INNER JOIN sel_candidato_etapa CT      ON CT.id_candidato = C.id_candidato                                                                                          
         INNER JOIN SEL_ETAPA ST ON ST.ID_ETAPA = CT.ID_ETAPA 
    WHERE  S.id_selecao = 15   AND Ct.id_etapa in (92,93)) AS P
    PIVOT ( 
    	MAX(CET_RESULTADO_NOTA) FOR ID_ETAPA IN ([ETAPA_1],[ETAPA_2])
    ) Pvt

    Quero entender e fazer funcionar com os dados estáticos e posteriormente utilizar a forma dinâmica.

    Desde já agradeço a atenção.

    Deus abençoe.




    terça-feira, 11 de fevereiro de 2014 14:26

Respostas

  • Os nomes das colunas no Select estão relacionados com o trecho abaixo:

    PIVOT ( 
    	MAX(CET_RESULTADO_NOTA) FOR ID_ETAPA IN ([Etapa 1], [Etapa 2])
    ) Pvt

    O nome da coluna para obter o MAX de CET_RESULTADO_NOTA quando ID_ETAPA é igual a 'Etapa 1' é [Etapa 1], e quando é igual a 'Etapa 2' é [Etapa 2].

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Giovani Cr terça-feira, 18 de fevereiro de 2014 15:37
    terça-feira, 11 de fevereiro de 2014 20:02

Todas as Respostas

  • Boa tarde,

    comphsfo, tente trocar ETAPA_1 e ETAPA_2 pelos valores exatos da coluna:

    SELECT CANDIDATO_NOME, [Etapa 1] as ETAPA_1, [Etapa 2] as ETAPA_2
    -- ...
    PIVOT ( 
    	MAX(CET_RESULTADO_NOTA) FOR ID_ETAPA IN ([Etapa 1],[Etapa 2])
    ) Pvt

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 11 de fevereiro de 2014 16:32
  • Obrigado pela ajuda, mas infelizmente ainda não deu certo. Tentei fazer assim mas sem sucesso.

    SELECT CANDIDATO_NOME,  ETA_NOME AS [ETAPA_1], CET_RESULTADO_NOTA AS [ETAPA_2]
    FROM (SELECT CANDIDATO_NOME, ST.ETA_NOME as ID_ETAPA, CET_RESULTADO_NOTA AS NOTA FROM VW_candidatos W                                                                                                                     
         INNER JOIN sel_oferta_encaminhamento O ON O.id_encaminhamento = W.candidato_id_encaminhamento                                                                      
         INNER JOIN sel_candidato C             ON C.id_oferta_encaminhamento = O.id_oferta_encaminhamento                                                                   
         INNER JOIN sel_oferta SO               ON SO.id_sel_oferta = O.id_sel_oferta AND SO.id_sistema = W.id_sistema                                                                                          
         INNER JOIN sel_selecao S               ON S.id_sel_oferta = SO.id_sel_oferta                                                                                        
         INNER JOIN sel_candidato_etapa CT      ON CT.id_candidato = C.id_candidato                                                                                          
         INNER JOIN SEL_ETAPA ST ON ST.ID_ETAPA = CT.ID_ETAPA 
    WHERE  S.id_selecao = 15   AND Ct.id_etapa in (92,93)) AS P
    PIVOT ( 
    	MAX(NOTA) FOR ID_ETAPA IN (ETA_NOME, CET_RESULTADO_NOTA)
    ) Pvt

    Se passar no PIVOT esse código abaixo nem executa:

    PIVOT ( 
    	MAX(NOTA) FOR ID_ETAPA IN ([ETAPA_1], [ETAPA_2])
    ) Pvt

    terça-feira, 11 de fevereiro de 2014 18:12
  • comphsfo, você tentou da forma como sugeri antes?

    SELECT CANDIDATO_NOME, [Etapa 1] as ETAPA_1, [Etapa 2] as ETAPA_2
    FROM (SELECT CANDIDATO_NOME, ST.ETA_NOME as ID_ETAPA, CET_RESULTADO_NOTA FROM VW_candidatos W                                                                                                                     
         INNER JOIN sel_oferta_encaminhamento O ON O.id_encaminhamento = W.candidato_id_encaminhamento                                                                      
         INNER JOIN sel_candidato C             ON C.id_oferta_encaminhamento = O.id_oferta_encaminhamento                                                                   
         INNER JOIN sel_oferta SO               ON SO.id_sel_oferta = O.id_sel_oferta AND SO.id_sistema = W.id_sistema                                                                                          
         INNER JOIN sel_selecao S               ON S.id_sel_oferta = SO.id_sel_oferta                                                                                        
         INNER JOIN sel_candidato_etapa CT      ON CT.id_candidato = C.id_candidato                                                                                          
         INNER JOIN SEL_ETAPA ST ON ST.ID_ETAPA = CT.ID_ETAPA 
    WHERE  S.id_selecao = 15   AND Ct.id_etapa in (92,93)) AS P
    PIVOT ( 
    	MAX(CET_RESULTADO_NOTA) FOR ID_ETAPA IN ([Etapa 1], [Etapa 2])
    ) Pvt

    O que ocorreu? Foi exibida alguma mensagem de erro? Qual?


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 11 de fevereiro de 2014 18:26
  • gapimex vlw d+ fiz da forma que vc disse e funcionou!

    Só fiquei com uma dúvida, qual a diferença:

    SELECT CANDIDATO_NOME, [Etapa 1] as ETAPA_1, [Etapa 2] as ETAPA_2

    SELECT CANDIDATO_NOME, ETA_NOME AS [ETAPA_1], CET_RESULTADO_NOTA AS [ETAPA_2]

    Deus abençoe!

    terça-feira, 11 de fevereiro de 2014 19:40
  • Os nomes das colunas no Select estão relacionados com o trecho abaixo:

    PIVOT ( 
    	MAX(CET_RESULTADO_NOTA) FOR ID_ETAPA IN ([Etapa 1], [Etapa 2])
    ) Pvt

    O nome da coluna para obter o MAX de CET_RESULTADO_NOTA quando ID_ETAPA é igual a 'Etapa 1' é [Etapa 1], e quando é igual a 'Etapa 2' é [Etapa 2].

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Giovani Cr terça-feira, 18 de fevereiro de 2014 15:37
    terça-feira, 11 de fevereiro de 2014 20:02
  • Fiz uma alteração incluindo mais um campo e parou de funcionar. Tem algo errado no código, os valores das etapas não são mais apresentados.

    SELECT CANDIDATO_NOME, [Etapa 1] as ETAPA_1, [Etapa 2] as ETAPA_2, [Etapa 3] as ETAPA_3
    FROM (SELECT CANDIDATO_NOME, ST.ETA_NOME as ID_ETAPA, CET_RESULTADO_NOTA FROM VW_candidatos W                                                                                                                     
         INNER JOIN sel_oferta_encaminhamento O ON O.id_encaminhamento = W.candidato_id_encaminhamento                                                                      
         INNER JOIN sel_candidato C             ON C.id_oferta_encaminhamento = O.id_oferta_encaminhamento                                                                   
         INNER JOIN sel_oferta SO               ON SO.id_sel_oferta = O.id_sel_oferta AND SO.id_sistema = W.id_sistema                                                                                          
         INNER JOIN sel_selecao S               ON S.id_sel_oferta = SO.id_sel_oferta                                                                                        
         INNER JOIN sel_candidato_etapa CT      ON CT.id_candidato = C.id_candidato                                                                                          
         INNER JOIN SEL_ETAPA ST ON ST.ID_ETAPA = CT.ID_ETAPA 
    WHERE  S.id_selecao = 27   AND Ct.id_etapa in (35,36,79) ) AS P
    PIVOT ( 
    	MAX(CET_RESULTADO_NOTA) FOR ID_ETAPA IN ([Etapa 1], [Etapa 2], [Etapa 3])
    ) Pvt
    

    quinta-feira, 20 de fevereiro de 2014 02:48
  • Deleted
    quinta-feira, 20 de fevereiro de 2014 10:01