Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 4 meses atrás por Avatar de MottaMotta.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #176408
    Avatar de ESSanchesESSanches
    Participante

      Boa tarde pessoal.

      Preciso fazer um relatório onde pegarei o faturamento de últimos 9 meses. Ate ai, tudo de boa. O problema é que sabemos que o SQL retorna isso em linhas, mas eu preciso mostrar isso em colunas.

      Tentei usar a função PIVOT, mas não me atendeu. Preciso de um retorno  com 10 colunas, onde a colunas serão:

      1 –  código da peça

      2 – qtde faturada no mês corrente – 9 meses

      3 – qtde faturada no mês corrente – 8 meses

      4 – qtde faturada no mês corrente – 7 meses

      …….

      9 – qtde faturada no mês corrente

      Hj, faço da seguinte maneira (por favor, não riam, mas foi o jeito que encontrei…rs)

      SELECT    PCA,
      SUM(ANO_MES9)                           AS ANO_MES_09,
      SUM(ANO_MES8)                           AS ANO_MES_08,
      SUM(ANO_MES7 )                          AS ANO_MES_07
      FROM   (SELECT    PECA  AS PCA,
      ANO_MES AS ANO_MES9,
      0    AS ANO_MES8,
      0   AS ANO_MES7
      FROM       TAB_FATURAMENTO
      UNION ALL
      SELECT    PECA  AS PCA,
      0 AS ANO_MES9,
      ANO_MES    AS ANO_MES8,
      0   AS ANO_MES7
      FROM       TAB_FATURAMENTO
      UNION ALL
      SELECT    PECA  AS PCA,
      0 AS ANO_MES9,
      0    AS ANO_MES8,
      ANO_MES   AS ANO_MES7
      FROM       TAB_FATURAMENTO)

      e assim segue para a qtde de meses que preciso retroagir. No caso de 9 meses, que é o que preciso, faço 9 “unions”.

      Sei que é beeeeeeeeeeeeeeeem feio, mas foi a maneira que achei.

      Como disse, tentei usar o PIVOT. Segue exemplo que peguei na net

      SELECT ano, valor, categoria
        FROM vendas
      )
      PIVOT (
        SUM(valor)
        FOR categoria 'Eletrônicos' AS eletronicos,
                      'Livros' AS livros, 
                      'Roupas'ASroupas)
      )
      ORDER BY ano;
      
      

      O problema é que na clausula IN do comando, preciso colocar comandos fixos, e não consegui fazer alguma coisa que fizesse essa clausula variar.

      Espero que tenha conseguido me fazer entender.

      Obrigado pela atenção.

       

      Emerson

      #176858
      Avatar de MottaMotta
      Participante

        Já deve ter caducado,  mas fiz algo assim com CASE

        __________________

        SUM(CASE WHEN ANO_MES=ADD_MONTHS(PDATA,-11) THEN VALOR ELSE 0 END) M12,

        SUM(CASE WHEN ANO_MES=ADD_MONTHS(PDATA,-10) THEN VALOR ELSE 0 END) M11,

        SUM(CASE WHEN ANO_MES=ADD_MONTHS(PDATA,-1) THEN VALOR ELSE 0 END) M2,

        SUM(CASE WHEN ANO_MES=PDATA THEN VALOR ELSE 0 END) M1,

        ___________

        ONDE PDATA SERIA UM PARÂMETRO

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.
      plugins premium WordPress