none
Transform Pivot - Ajuda com Query RRS feed

  • Pergunta

  • Olá Pessoal!

    estou precisando criar uma query com transform pivot mas não estou conseguindo chegar no meu desejo:

    Tenho a tabela exemplo abaixo:

    estou usando o trecho abaixo:

    TRANSFORM B.VALOR
    SELECT DISTINCT b.COD,
                    B.TIPO
    FROM [BD_TESTES$] b
    GROUP BY B.COD,
             B.TIPO,
             B.VALOR
    ORDER BY B.COD 
    PIVOT b.GRUPO

    que me retorna isso:

    mas queria obter o resultado abaixo:

    o que está faltando?

    Valeu pessoal!


    Natan

    domingo, 6 de março de 2016 15:47

Respostas

  • Ave Google!!!

    encontrei a solução, bem simples por sinal:

    TRANSFORM FIRST (B.VALOR)
    SELECT DISTINCT B.COD,
                    B.TIPO
    FROM [BD_TESTES$] B
    GROUP BY B.COD, B.TIPO
    ORDER BY B.COD 
    PIVOT b.GRUPO
    
    Obrigado a todos que tentaram!


    Natan


    • Editado 'Natan Silva domingo, 6 de março de 2016 19:51
    • Marcado como Resposta 'Natan Silva domingo, 6 de março de 2016 19:52
    domingo, 6 de março de 2016 19:50

Todas as Respostas

  • Natan,

    você precisa dizer ao SQL que cada TIPO é um registro distinto, porque quando você faz o agrupamento, tendo COD E TIPO repetidos, ele vai considerar como apenas um, justamente por agrupar.

    Para que você consiga o resultado desejado:

    SELECT COD,
    TIPO,
    CLASSE,
    COR_A,
    COR_B
    FROM
    (
      SELECT
    		NEWID() ID,
    		COD,
    		TIPO,
    		GRUPO,
    		VALOR		  
      FROM [AUTO] c
    ) d  
    PIVOT
    (
        max(VALOR)
        FOR GRUPO IN ([CLASSE], [COR_A], [COR_B])
    ) p

    Att


    Antero Marques

    domingo, 6 de março de 2016 17:47
  • Olá Antero,

    Obrigado por ajudar... tentei utilizar o seu método mas dá erro na clausula from ... um detalhe que não mencionei é que estou fazendo isso via ADO no excel e não diretamente no SqlServer, isso faz com que a função newID não funcione então criei essa coluna na base, alterei também o campo [AUTO] pelo nome da base mas mesmo assim não vai.

    SELECT d.cod,
           d.tipo,
           d.classe,
           d.cor_a,
           d.cor_b
    FROM
      (SELECT c.ID,
              c.cod,
              c.tipo,
              c.grupo,
              c.valor
       FROM [bd_testes$] c) d 
    pivot max(valor)
    FOR grupo IN ([classe],
                  [cor_a],
                  [cor_b]) p
    Obrigado!

    Natan

    domingo, 6 de março de 2016 19:43
  • Natan,

    manda o resultado de um select simples na tabela com o novo campo, por favor.

    Com o novo campo que você criou, continua apresentando mensagem de erro ?

    Att,


    Antero Marques


    domingo, 6 de março de 2016 19:46
  • Ave Google!!!

    encontrei a solução, bem simples por sinal:

    TRANSFORM FIRST (B.VALOR)
    SELECT DISTINCT B.COD,
                    B.TIPO
    FROM [BD_TESTES$] B
    GROUP BY B.COD, B.TIPO
    ORDER BY B.COD 
    PIVOT b.GRUPO
    
    Obrigado a todos que tentaram!


    Natan


    • Editado 'Natan Silva domingo, 6 de março de 2016 19:51
    • Marcado como Resposta 'Natan Silva domingo, 6 de março de 2016 19:52
    domingo, 6 de março de 2016 19:50
  • Boa Natan !

    Que bom que conseguiu... quando eu precisar de algo referente a consultas desse tipo, já sei quem procurar !

    Att,


    Antero Marques

    domingo, 6 de março de 2016 20:33
  • hahahaha.... tamu junto amigo!

    Natan

    domingo, 6 de março de 2016 20:38