none
Dúvida em Pivot table RRS feed

  • Pergunta

  • Olá pessoal, boa noite, com base em um modelo postado pelo Marcelino, fiz essa Pivot table no sql 2000, porém gostaria de retirar a 'REAL_' que aparece ao lado do campo ANO, seria para ficar somente o ANO, assim:

    2008 / 2009 / 2010

    e não assim;

    REAL_2008 / REAL_2009 / REAL_2010

    DECLARE @SQl varchar(4000),
            @Col varchar(4000)
    SELECT
        @Col = ISNULL(@Col+',','')
        + 'REAL_'+ CAST(ANO AS VARCHAR(4))
        + ' = max(case ANO when '
        + CAST(ANO AS VARCHAR(4))
        + ' then HORAS_REALIZADAS end)'
    FROM
        V_PLANEJAMENTO
    WHERE
        ANO BETWEEN @ANO_INICIO AND @ANO_FIM
    GROUP BY
        ANO 

    SET @SQl = ' select CD_ATIVIDADE, DS_ATIVIDADE, STATUS,' + @Col
    SET @SQl = @SQl + ' from V_PLANEJAMENTO group by CD_ATIVIDADE, DS_ATIVIDADE, STATUS'

    exec (@SQl)
    terça-feira, 20 de abril de 2010 21:34

Respostas

  • Marques bom dia

    /*
    Removi a palavra Real e acrescentei a função quotename, 
    assim não ira causar error.
    
    obs.: p/ um valor inteiro se referenciado como coluna
       ele deve esta entre [](colchetes) ou '' (apóstrofo)
    */
    
    DECLARE @SQl VARCHAR(4000), 
        @Col VARCHAR(4000)
    SELECT 
       @Col = ISNULL(@Col+',','') 
       + QUOTENAME(CAST(ANO AS VARCHAR(4)),'[]') 
       + ' = max(case ANO when ' 
       + CAST(ANO AS VARCHAR(4)) 
       + ' then HORAS_REALIZADAS end)'
    FROM 
       V_PLANEJAMENTO 
    WHERE
       ANO BETWEEN @ANO_INICIO AND @ANO_FIM
    GROUP BY
       ANO 
    
    SET @SQl = ' select CD_ATIVIDADE, DS_ATIVIDADE, STATUS,' + @Col
    SET @SQl = @SQl + ' from V_PLANEJAMENTO group by CD_ATIVIDADE, DS_ATIVIDADE, STATUS'
    
    EXEC (@SQl)
    

    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    • Marcado como Resposta Marques Junior quarta-feira, 21 de abril de 2010 23:03
    quarta-feira, 21 de abril de 2010 14:34

Todas as Respostas

  • Tente o código abaixo, retirei apenas a string REAL_ . Veja se ajuda.
    Abraço
    DECLARE @SQl varchar(4000), 
      @Col varchar(4000)
    SELECT 
     @Col = ISNULL(@Col+',','') 
     + CAST(ANO AS VARCHAR(4)) 
     + ' = max(case ANO when ' 
     + CAST(ANO AS VARCHAR(4)) 
     + ' then HORAS_REALIZADAS end)'
    FROM 
     V_PLANEJAMENTO 
    WHERE
     ANO BETWEEN @ANO_INICIO AND @ANO_FIM
    GROUP BY
     ANO 
    
    SET @SQl = ' select CD_ATIVIDADE, DS_ATIVIDADE, STATUS,' + @Col
    SET @SQl = @SQl + ' from V_PLANEJAMENTO group by CD_ATIVIDADE, DS_ATIVIDADE, STATUS'
    
    exec (@SQl)
    

    hã?
    terça-feira, 20 de abril de 2010 21:46
  • DTito já havia tentado isso mas gerar erro.
    terça-feira, 20 de abril de 2010 23:05
  • Marques bom dia

    /*
    Removi a palavra Real e acrescentei a função quotename, 
    assim não ira causar error.
    
    obs.: p/ um valor inteiro se referenciado como coluna
       ele deve esta entre [](colchetes) ou '' (apóstrofo)
    */
    
    DECLARE @SQl VARCHAR(4000), 
        @Col VARCHAR(4000)
    SELECT 
       @Col = ISNULL(@Col+',','') 
       + QUOTENAME(CAST(ANO AS VARCHAR(4)),'[]') 
       + ' = max(case ANO when ' 
       + CAST(ANO AS VARCHAR(4)) 
       + ' then HORAS_REALIZADAS end)'
    FROM 
       V_PLANEJAMENTO 
    WHERE
       ANO BETWEEN @ANO_INICIO AND @ANO_FIM
    GROUP BY
       ANO 
    
    SET @SQl = ' select CD_ATIVIDADE, DS_ATIVIDADE, STATUS,' + @Col
    SET @SQl = @SQl + ' from V_PLANEJAMENTO group by CD_ATIVIDADE, DS_ATIVIDADE, STATUS'
    
    EXEC (@SQl)
    

    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    • Marcado como Resposta Marques Junior quarta-feira, 21 de abril de 2010 23:03
    quarta-feira, 21 de abril de 2010 14:34
  • Opa, é isso mesmo Marcelino. Mas uma vez obrigado novamente. Valeu pela observação bom dica.
    quarta-feira, 21 de abril de 2010 23:03