Pular para o conteúdo
  • Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 6 meses atrás por leandrolbs.
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #100828
    facc
    Participante

      Boa tarde a todos,

      Tenho essa SQL

      SELECT GCCADLINHA.DESCRICAO,SUM(C.VALORTOTAL) AS TOTAL,
      CASE WHEN MAX(GCCADPROD.DIFER) IN (0,6,7,8,10) THEN 'PRODUTOS'
      ELSE 'SERVICOS' END TIPO
      FROM CONTRATOSPRODUTOS P JOIN CONTRATOS C
      ON (C.CODIGOCONTRATO = P.CODIGOCONTRATO AND C.FILIAL = P.FILIAL)
      JOIN GEMCO.CAD_ITPROD GCCADITPROD
      ON (GCCADITPROD.CODPRODDF LIKE (RPad(LPad(P.CODIGOPRODUTO, 5, '0'),6, '%')))
      JOIN GEMCO.CAD_PROD GCCADPROD
      ON (GCCADPROD.CODPROD = GCCADITPROD.CODPROD)
      JOIN GEMCO.CAD_LINHA GCCADLINHA
      ON (GCCADLINHA.CODLINHA = GCCADPROD.CODLINHA)
      WHERE C.DATACONTRATO BETWEEN '15/09/2011' AND '15/09/2011'
      AND GCCADPROD.DIFER IN (-4,0,6,7,8,10)
      GROUP BY GCCADLINHA.DESCRICAO ORDER BY MAX(GCCADLINHA.CODLINHA) DESC

      E preciso trazer a participação (%) as vendas totais.

      O SQL traz o resultado:

      #100835
      leandrolbs
      Participante

        Cara to sem tempo pra te ajudar neste select…

        mas faz regra de 3… é simples..


        sum(total) = 100%

        então a linha x representa =y porct.
        ( sum(total) - 100
        x - y )

        y.sum(total) = x (vezes) 100

        x (vezes) 100
        ------------ = y (achou)..rsss
        sum(total)

        #100837
        burga
        Participante

          Qual é o total (100%)? É a somatória da coluna TOTAL?
          Essas coisas você tem que detalhar melhor, jogando assim sem detalhes fica difícil entender aonde você quer chegar…

          Mas tentando adivinhar o que você quer… Se for isso mesmo que eu estou pensando, onde 100% é a somatória da sua coluna TOTAL, e você quer saber a porcentagem de cada valor da coluna em cima de sua somatória, você pode usar isso:

          SELECT GCCADLINHA.DESCRICAO,SUM(C.VALORTOTAL) AS TOTAL,
          CASE WHEN MAX(GCCADPROD.DIFER) IN (0,6,7,8,10) THEN 'PRODUTOS'
          ELSE 'SERVICOS' END TIPO,
          SUM(C.VALORTOTAL) OVER () TOTAL_100_PCT
          FROM CONTRATOSPRODUTOS P JOIN CONTRATOS C
          ON (C.CODIGOCONTRATO = P.CODIGOCONTRATO AND C.FILIAL = P.FILIAL)
          JOIN GEMCO.CAD_ITPROD GCCADITPROD
          ON (GCCADITPROD.CODPRODDF LIKE (RPad(LPad(P.CODIGOPRODUTO, 5, '0'),6, '%')))
          JOIN GEMCO.CAD_PROD GCCADPROD
          ON (GCCADPROD.CODPROD = GCCADITPROD.CODPROD)
          JOIN GEMCO.CAD_LINHA GCCADLINHA
          ON (GCCADLINHA.CODLINHA = GCCADPROD.CODLINHA)
          WHERE C.DATACONTRATO BETWEEN '15/09/2011' AND '15/09/2011'
          AND GCCADPROD.DIFER IN (-4,0,6,7,8,10)
          GROUP BY GCCADLINHA.DESCRICAO ORDER BY MAX(GCCADLINHA.CODLINHA) DESC

          A partir daí você faz a regra de três como o Leandro já disse…

          #100843
          leandrolbs
          Participante

            aproveitando…

            Gostaria de gerar uma porcentagem …

            Tenho uma vw .. onde mostra o USUARIO / MES / QTD

            Quero saber, no mes de MARCO quando o USUARIO xxxx representou no campo quantidade…


            SELECT vpb1.USUARIO,
            vpb1.MES,
            vpb1.QTD,
            ROUND( RATIO_TO_REPORT(QTD) OVER ()*100 ,2) AS PERCENTUAL
            FROM JR.Vw_Pends_Baixadas_2011 vpb1
            where vpb1.mes = 'MARCO'

            Colocando a clausula RATIO_TO_REPORT junto ao WHERE setando o MES funciona a mil maravilhas..

            mas queria que ele agrupby por MES… e o SUM tem que ser o mes…

            tipo,
            SUM(QTD) WHERE MARCO (100%) é 1000
            SUM(QTD) WHERE ABRIL (100%) é 800

            Então o USUARIO xxxx representou (10%) em MARCO e (80%) em ABRIL…exemplo…

            tem algum outro comando tipo esse RATIO pra meu auxiliar nesta consulta….??

            #100844
            leandrolbs
            Participante

              achei muita coisa legal aqui…

              http://psoug.org/reference/analytic_functions.html

              #100852
              burga
              Participante

                Aí Leandro, ão conhecia essa função… Muito legal, e muito mais simples do que fazer a regra de três… Mas em se falando de funções analíticas, pra conseguir o que você quer você pode tentar desta forma…

                SELECT vpb1.USUARIO,
                vpb1.MES,
                vpb1.QTD,
                ROUND( RATIO_TO_REPORT(QTD) OVER (PARTITION BY vpb1.mes)*100 ,2) AS PERCENTUAL
                FROM JR.Vw_Pends_Baixadas_2011 vpb1;

                #100853
                leandrolbs
                Participante

                  como uma luva @Burga… obrigado.

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