Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

silviap

Calcular porcentagem.

Recommended Posts

Pessoal, preciso mostrar uma coluna a mais no resultado dessa query, com o campo porcentagem.

 

O Problema é que sou nova em sql e não sei como fazer isso. Alguém pode me ajudar?


Query:

--seleciona os 5 cliente que mais compraram.
Select Top_Five.Emitente_ok as Emitente,

      Top_Five.Total as Total
from Top_Five


union all


-- Soma todas as vendas e subtrai o valor dos 5 clientes que mais compraram.
(select oi.Emitente,
  SUM(oi.Total)     
from 
(Select 'Outros' as Emitente, 
SUM(fatur.total) as Total 
from [Repositorio_Padtec].[dbo].[Tabela_NF_Faturada]fatur
where 
year([dt-emis-nota]) = 2013 and
month([dt-emis-nota]) = 3


union all 
Select 'Outros' as Emitente,
-Sum(Top_Five.Total) as Total
from Top_Five)oi
group by oi.Emitente
)
Eu preciso criar uma coluna a mais com a porcentagem.

tentei somar os valores o total e fazer a conta, mas retorna 1. Pq no group by Eu preciso informar o emitente.

ai é ele divide por ele mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

percentual de qual coluna por qual coluna? Qual a versão do SQL? Tem um exemplo de massa de dados para postar?

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oie, Consegui resolver, fiz um subselect. Não sei se foi a melhor opção ou se tem um jeito melhor...

eu tenho duas colunas:

 

Emitente,
Total
Imagine esses valores:
Emitente valor porcentagem Maria 100 20,83% SILVIA 150 31,25% Joana 230 47,92%

 

 

Na pergunta eu tinha os campos Emitente e Valor e queria calcular porcentagem. Solucionei com o select abaixo, mas não sei se é o jeito mais adequado de fazer.

 

select

total.Emitente,
total.Total,
cast((total.Total /( select
sum(total2.Total)
from
(Select
Top_Five.Emitente_ok as Emitente,
Top_Five.Total as Total
from
Top_Five
union all
(select
oi.Emitente,
SUM(oi.Total)
from
(Select
'Outros' as Emitente,
SUM(fatur.total) as Total
from
[Repositorio_Padtec].[dbo].[Tabela_NF_Faturada]fatur
where
(LEN(@param_ano)>=1 AND LEN(@param_mes)>=1
and (year([dt-emis-nota]) = @param_ano and
month([dt-emis-nota]) = @param_mes))
or
(LEN(@param_ano)>1 AND LEN(@param_mes)<=0
and (year([dt-emis-nota]) = @param_ano))
union all
Select
'Outros' as Emitente,
-Sum(Top_Five.Total) as Total
from Top_Five)oi
group by
oi.Emitente))total2))as float(2)) as porcentagem
from
(Select Top_Five.Emitente_ok as Emitente,
Top_Five.Total as Total
from Top_Five
union all
(select oi.Emitente,
SUM(oi.Total)
from
(Select 'Outros' as Emitente,
SUM(fatur.total) as Total
from [Repositorio_Padtec].[dbo].[Tabela_NF_Faturada]fatur
where
(LEN(@param_ano)>=1 AND LEN(@param_mes)>=1
and (year([dt-emis-nota]) = @param_ano and
month([dt-emis-nota]) = @param_mes))
or
(LEN(@param_ano)>1 AND LEN(@param_mes)<=0
and (year([dt-emis-nota]) = @param_ano))
union all
Select 'Outros' as Emitente,
-Sum(Top_Five.Total) as Total
from Top_Five)oi
group by oi.Emitente))total

Compartilhar este post


Link para o post
Compartilhar em outros sites

É uma solução, porém verifique a performance.

Perguintei da versão do SQL, pois pode ser feito por CTE ao invés de subselect.

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.