- Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 6 meses atrás por
leandrolbs.
-
AutorPosts
-
15 de setembro de 2011 às 10:21 pm #100828
facc
ParticipanteBoa 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) DESCE preciso trazer a participação (%) as vendas totais.
O SQL traz o resultado:
16 de setembro de 2011 às 12:04 am #100835leandrolbs
ParticipanteCara 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)16 de setembro de 2011 às 12:27 am #100837burga
ParticipanteQual é 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) DESCA partir daí você faz a regra de três como o Leandro já disse…
16 de setembro de 2011 às 8:43 pm #100843leandrolbs
Participanteaproveitando…
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%) é 800Entã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….??
16 de setembro de 2011 às 8:43 pm #100844leandrolbs
Participanteachei muita coisa legal aqui…
18 de setembro de 2011 às 5:38 am #100852burga
ParticipanteAí 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;19 de setembro de 2011 às 3:58 pm #100853leandrolbs
Participantecomo uma luva @Burga… obrigado.
-
AutorPosts
- Você deve fazer login para responder a este tópico.
