select RANK() OVER(ORDER BY Saídas_este_ano DESC) as posicao ,
t.ref as ref, st.ststamp as stamp, t.design as design,
t.Saídas_este_ano as saidasesteano,
case when sum(t.Saídas_este_ano) over() = 0 then 0
else Saídas_este_ano/sum(t.Saídas_este_ano) over() end *100 as
percentagemdototal,
t.Saídas_ano_anterior as saidasanoanterior,
case when sum(t.Saídas_ano_anterior) over() = 0 then 0
else Saídas_ano_anterior/sum(t.Saídas_ano_anterior) over() end * 100 as
percentagemdototalanoanterior,
Saídas_este_ano-Saídas_ano_anterior as variacaovalor,
case when Saídas_ano_anterior=0 then 0
else ((Saídas_este_ano-Saídas_ano_anterior)/Saídas_ano_anterior) end * 100 as
percentagemvariacao
from (select sl.ref, sl.design,
sum(case when year(datalc)=year(getdate())
then sl.ett * (case when sl.qtt < 0 then -1 else 1 end)else 0 end) as Saídas_este_ano,
sum(case when year(datalc)=year(getdate())-1
then sl.ett * (case when sl.qtt < 0 then -1 else 1 end) else 0 end) as Saídas_ano_anterior
from sl (nolock) where sl.trfa = 0 and sl.entrada = 0 and sl.stns=0
and (year(datalc)=year(getdate()) or year(datalc)=year(getdate())-1)
group by sl.ref, sl.design )t inner join st on t.ref=st.ref